ユーザーリスト
はじめに
ここではセッションにいるユーザーリスト(メンバーリスト)を作るLogiXを使って実例の紹介をします。 このLogiXは@Aetoriz_in_VRさんの作品です。本当に10分くらいで作られました。
解説
全体図
全体のLogiXは次の図のようになっています。左がLogiX、真ん中右のリストがセッションにいるユーザーのリスト、ユーザーリストです。右はTextrendererのインタフェースノードが表示されています。
Timer
最初に左上のところから解説します。
ここではTimerを使って、一定間隔でImpulseを発生させています。ここでは5秒に一度発火します。これでFor文をたたいています。ここでHost Userは特に必要は無いです。
RootSlot
すべての情報はRoot Slotから来ます。 Root Slotからスロット全体の情報を得て、For文のループ回数にはChildren Countを使っています。セッションにあるChildスロットなのでかなりの数が出てくることになります。Get ChildでRoot Slotからn番目のChild Slotを取り出します。
ForとWriteによるStringの初期化
右にStringがあります。これにForにつながっているWriteの出力が薄いピンク色でつながっています。先が矢印になっています。Forの一番上は、Impulseを受けたときに一回だけ実行されます。Writeへの入力はないので、nullがStringに書き込まれて初期化されます。
コア部分
まず、下のGet ChildからWriteのところまでをみてみましょう。Get Active Userでは「オブジェクトを保持しているユーザーを取得する」をします。Root Slotには多数のSlotがあり、Get Active Userをしてもほとんどはnullになります。これがnullでないときに、ImpulseをWriteにつなぎます。
Writeでは、ユーザー名前を再びStringに書き込んでいきます。これが上の部分で作られます。ここではStringがnullのときとそうでないときで?:を使って切り替えています。つまりnullの時にはUser Usernameからの出力をそのまま、そうで無いときには+からの出力をWriteに入れています。なぜこのようにしているかというと、null+改行を避けるためです。この?:がないと、最初に改行されて、そして1番目のユーザーの名前が現れます。余計な改行はTextの設定次第で見た目を悪くする原因になりえます。
+の最初の入力はUser Usernameを使ってユーザー名を文字列にしたものです。これに改行(New Line)加え、さらにこれまでの記録をしているStringを加えています。こうしてStringの上に次々にRoot Slotから得たユーザーの名前が付け加わっていきます。
出力部分
最後にStringの内容をRelay(入力に繋がれたものを出力する)を使って、TextRendererに書き込んでいます。これはインタフェースノードを表示させてそのTextという項目に接続すればOKです。
出力をみると分かりますが、このセッションを立てたVEXさんが一番下にあり、そこに新しいメンバーが上に順番に書き込まれています。
改変版のコア部分
まず一番上がセッションを立てたユーザー名にして、下に順番に入ってきたユーザー名とするには、+における文字列の接続順番を変えればできます。つまり最初にStringにして改行して次のユーザー名を入れます。
また、最初の改行を許すのであれば、?:の部分を取り除くことができます。そうすると図のようになります。
+への入力順番をさらに変更してString, User Username, New Lineにすれば、null+改行が入らなくなります。
終わりに
Root Slotからの情報を切り分けて最後はユーザー名の文字列にしてそれをStringに次々に書き込んで行っています。
何かの役に立てば幸いです。
関連しているノード
Root Slot, Children Count, For, Get Child, Get Active User, Write, User Username, New Line, String, IsNull, NotNull, If, ?:, Relay