LogiXの概要
LogiXはNeosのビジュアルプログラミング言語です。命令の長いリストである従来のプログラミング言語とは異なり、図形として構成されます。データはノードからノードへとワイヤーに沿って流れ、プログラムはあなたの周りの空間に構築されます。
基本
データ
加算などの操作は、ノードによって実行されます。データ(数値やテキストなどの値)は、ノード間のワイヤー上を流れます。
データはソースから宛先に流れます。これは一方通行です。データは、ノードの左側から流出したり、ノードの右側に流入したりすることはできません。
ノードの左側の接続ポイントはその入力であり、右側の接続ポイントは出力です。色を確認することで、各入力または各出力が提供するデータの型を判断できます。ノードブラウザのVariables > Storageの項目を参照して、さまざまなデータ型とそれに対応する外観を確認できます。LogiXツールチップをノードの接続ポイント上にかざすと、入力や出力のタイプを確認することができます。
データ入力に接続できるのは1つだけです。2つの異なるものを同時に使用することはできません!ただし、1つの出力で他の多くの場所に接続できます。
インパルス
Main article: LogiX Impulses/ja
データに加えて、インパルスもノードからノードに流れます。タイマーがオフになったり、ボタンが押されたりするなど、何かが起こったことに応じてインパルスが発生します。
インパルスは物事を整理し、ワールドを変えるノードには常に必要です。インパルスを受け取るノードは、パススルーノードと呼ばれます。 パススルーノードから流出する値は、多くの場合、インパルス中にのみ存在するため、一時的になります。 たとえば、Duplicate Slotのスロット出力は、複製をしたインパルスの間のみ有効です。
逆に、値を読み取るだけのノードにインパルスが使用されることはめったにありません。ただし、コストがかかる場合(スロットを全世界で検索する場合など)は除きます。
インパルスはインパルスワイヤに沿って流れます。インパルス出力は1つの場所にしか行くことができません。インパルスは一度に2つの方向に進むことはできません。インパルス入力は多くのワイヤを受け取ることができます。これにより、いくつかの異なる経路が1つに統合されます。
右側のLogiXは、ボタンが押されるたびに現在の時刻を変数に書き込みます。 変数の値が現在の時刻と等しくないことに注意してください。インパルスが発生したときにのみ変化します。
インパルスワイヤは、白と灰色の矢印パターンで識別できます。インパルス入力と出力も矢印の頭のような形をしています。
(ノードをノード自体に接続するなどして)インパルスの無限ループを形成すると、ゲームは短時間フリーズします。その後、問題のあるノード(または複数のノード)が壊れ(白から赤に変わり)ます。。壊れたノードは機能しなくなりますが、LogiXツールチップでセカンダリを押してリセットできます。
使用方法
LogiXを作成または変更するには、LogiX tooltipを装備する必要があります。 インベントリーのEssentialToolsフォルダにあります。
作成
LogiXツールチップは、必要なノードの大部分を閲覧できるノードブラウザを生成できます。これはカテゴリに分類されています。さまざまなカテゴリを説明する表については、LogiXページを参照してください。ノードを見つけてダブルクリックで選択します。
現在選択されているノードが、パッキングルートとともにツールチップに表示されます(以下を参照)。
ダブルクリックすると、選択したノードが生成されます。ノードを接続するには、ツールチップ先やレーザーで入力や出力に向けてから、トリガーを押します。ワイヤーが引けます。互換性のある入力や出力にカーソルを合わせてトリガーを離すと、ワイヤーが作成されます。
ワイヤーを切断するには、ワイヤーやノードから離れた状態でトリガーを引きます。線が表示されます。トリガーを放したときにラインに接触しているワイヤー(赤くなる)はすべて破壊されます。
レーザーでワイヤーをつかむと、Relayが作成されます。Relayを使用すると、ワイヤの形状を変更したり、複数の入力を単一のデータに接続したり(または、複数のインパルスワイヤを単一のインパルス入力に接続したり)できます。
intやstringsなどの一部のタイプでは、入力からドラッグしながらセカンダリを押して、新しいinputノードを作成できます。これにより、値を直接入力できます。どの型でも、出力からドラッグしながらセカンダリを押すと、現在の値を表示する新しいdisplayノードを作成できます。
出力は常に同じ型の入力に接続することができます。それ以外の場合は、接続時に自動的に作成される 'キャスト の後で型に互換性がある場合があります。
一部のノードには、明るい紫色の dummy入力があります。 何かを接続すると、適切なタイプに変換されます。これは、ノードのオーバーロードとして知られています。 一部のノードは、オーバーロード時に興味深い動作をする可能性があります。 -- たとえば、*ノードは文字列とintを乗算して、文字列のコピーを多数作成できます。
Extract(抽出)
ツールチップは、3つの異なる方法でプロパティとコンポーネントを抽出して、ワールドを観察および制御できるようにします。
- Extract Interface(インターフェースを抽出)
- スロットやコンポーネント(またはそのプロパティのいずれか)をグラブしてセカンダリを押して、インターフェイスカードを作成します。インターフェイスカードは、コンポーネントから値を読み取るために使用できる出力を提供します。出力をインターフェイスカードにドラッグしてドライブノードを作成したり、インターフェイスカードからドラッグしてセカンダリを押してreference(参照)ノードを作成したりすることもできます。
- Extract Drive Node(ドライブノード抽出)
- valueプロパティをグラブしているときにセカンダリを押して、ドライブノードを作成します。ドライブノードは入力であり、そのプロパティの値を上書きします。プロパティを一度にドライブできるのは1つだけです。
- Extract Ref Node(参照ノード抽出)
- referenceプロパティをグラブしているときにセカンダリを押して、reference(参照)ノードを作成します。referenceノードは、出力として、参照を取得するために、または入力として、Writeノードのようなものにターゲットを与えるために使用できます。
Interfaces(インターフェース)
インターフェイスカードを使用すると、スロットやコンポーネントから値を取得できます。また、特定の値を書き込むか、ドライブノードで制御することにより、コンテンツを制御することもできます。
ノードの出力から行うのと同じように、インターフェイスカードからワイヤを引き出すことができます。 ワイヤをインターフェイスの中にドラッグすると、そのプロパティのドライブノードが生成されます。
1つのものは1つだけインターフェイスカードを持っています。
ドライブ
Main article: Drive
ドライブノードを使用すると、ノードの作成元のプロパティを排他的に制御できます。ドライブされていると、プロパティが紫色になり、手動で値を設定できなくなります。
代わりに、プロパティは接続されているものから値を取得します。ドライブノードは、入力ノードが接続された状態で生成されます。ワイヤーを切断すると、ドライブノードは自動的にそれ自体を破壊します。
1つのものに対して1つだけのドライブノードを持つことができます。
Refs(参照)
Refノードは何かへの参照を提供します。Duplicate Slotのようなものに接続すると、カードのスロット出力が直接接続されないことに気付いたかもしれません。
1つのものに対して多くのrefノードを持つことができます。Refノードは、参照を含む出力を提供します。
パッキング
LogiXが完成したら、パックして非表示にします。ツールを持っているのと同じ手でスロットをグラブし(インスペクターウィンドウの階層で名前をグラブする)、コンテキストメニューを開き、パッキングルートに設定を選択します。
次に、LogiXノードにレーザーを当てながら、セカンダリ入力を押し続けます。 円がいっぱいになったら、放します。接続されているすべてのノードとともに、スロットの下にパックされます。
パッキングはノードのビジュアルを削除しますが、ノードの位置は保持します。それらはパッキングルートの子であるため、パッキングルートに沿って移動、回転、スケーリングします。
LogiXをアンパックするには、スロットをグラブします(つまり、インスペクターウィンドウでスロットをグラブする)。コンテキストメニューでアンパックを選択します。これにより、そのスロットの下にあるすべてのノードが復元されます。さらに、ノードをアンパックすると、ノードに接続されているすべてのノードがアンパックされます。
パッキングルートセットがない場合、ツールは"Pack-in-place"と表示します。これは、ターゲットにしたノードの親の下にノードをパックし、LogiXノードのさまざまなグループを検査する場合に役立ちます。 以前にパックされたことのないノードを誤ってパックした場合、それらはおそらくワールドルートの下にあります。ノードの1つを取得して解凍することで、それらをすべて解凍できます。ノードが接続している全体が一度に解凍されます。
Traversal Modeが"Stop At Other Nodes"に設定されている場合、ターゲットに直接接続されているノードのみがパックされます。参照ノードは、ターゲットへの接続だけではないことに注意してください。逆に、"Complete"モードでは、参照ノードも含みます。これは、変数ノードのようなものがそれらに書き込むノードと一緒にパックされていることを確認するのに役立ちます。ただし、これは大きな頭痛の種となる可能性があります。アバターのルートスロットをすべて参照するLogiXの個別の部分が多数ある場合は、どうなるかを検討してください。
上級
評価
上記のように、インパルスは常に1人のユーザーによって実行されます。これは一般的にLogiXに当てはまります -- 各ユーザーはLogiXを見て、それが何を意味するかを決定します。これがドライブノードを効率的にしています: それを機能させるために誰とも通信する必要はありません。
したがって、ユーザーごとに異なる結果が得られる可能性があります。 たとえば、Local Userノードは、LogiXを評価しているユーザーのユーザー を出力します。ノードをDisplayノードに接続すると、ワールド中の各人に自分のユーザー名が表示されます。
ローカルユーザーがHost Userと等しいかどうかを確認し、その結果を使用してスロットのアクティブ状態をドライブすると、ホストユーザーのみがスロットを表示できます。 他のすべての人はそれが非アクティブ化されていると見えます。
参考資料
操作
プライマリー
- 先端が入力または出力に物理的に触れている間、クリックして押したままにして、新しいワイヤを作成します。ワイヤーを接続するために離します
- 先端が入力や出力に触れていないときにクリックして押したままにして、切断を開始します。話してしてカットラインに沿ってすべてのワイヤをカットします
- ダブルクリックしてノードを生成します
セカンダリー
- 円が塗りつぶされるまで押し続け、離してターゲットノードをパックします
- クリックしてターゲットノードをツールチップにコピーします
- ワイヤーをドラッグしながらクリックして入力ノードまたは表示ノードを作成します
- 壊れたノードをポイントしながらクリックしてリセットします
- "Extract: Interface"モードの場合:スロット、コンポーネント、またはプロパティプロキシをグラブしながらクリックして(何かをグラブしてその名前を手に浮かせた場合)インターフェースを抽出します
- "Extract: Drive Node"モードの場合:グラブしたままクリックします ドライブノードを抽出するためのプロパティプロキシ
- "Extract: Reference Node"モードの場合:プロパティプロキシをグラブしながらクリックして、参照ノードを抽出します
グラブ
- ワイヤをグラブして新しいrelayを作ります
用語集
背景
- 型
- データのタイプは、データが持つことができる値とその意味を記述します。一般的なタイプには、int(整数)、float(小数をもつ数値)、string(テキスト)、boolean (true/false)があります。
- データ
- データの一部は値です。 5、5.3、true、helloworldはすべてデータです。
- Boolean/Bool
true
かfalse
のいずれかの値をとる型- Integer/Int
3
や-5
のような整数値- Float
2.3
や0.0
のような小数のある数値- Enum
LeftController/RightController/Unknown
のように、可能な値の固定セットを持つ型- String
"Hello"
、""
、"123"
のように任意の文字列を表す型- User
- ユーザーを識別するために必要なすべての情報を含む型
基本
- ノード
- 2つの数値を加算したり、フレームごとにインパルスを送信したりするなど、ある種の操作を実行するLogiXの単一ユニット。
- ワイヤ
- LogiXノード間の接続。 ワイヤーはデータまたはインパルスのいずれかを運ぶことができます。
- relay(リレー)
- ワイヤーの形状を制御できるノード。これは、出力に直接関連付けられた単なる入力です。複数のデータワイヤをリレーの出力に接続したり、複数のインパルスワイヤをインパルスリレーの入力に接続したりすることもできます。
- 入力
- ノードの左側に入るデータの一部。非インパルス入力に流入できるワイヤは1本だけです。多くのインパルスワイヤが1つのインパルス入力に流れ込む可能性があります。
- 出力
- ノードの右側から出るデータ。多くのワイヤが非インパルス出力から流出する可能性があります。1つのインパルスワイヤから1つのインパルスワイヤのみが流出できます。
- インパルス
- 単一のユーザーによって実行される単一のイベント。インパルスはLogiXグラフを流れます。インパルスは複製や分割できません。インパルスは1つのパスをたどり、1つ経路だけをたどります。一部の種類のノードは、次のようなインパルスを生成できます。Raw Data Tooltip Events.
詳細
- パススルーノード
- インパルスを受け入れるノード。Display Impulseノードを除くすべてのパススルーノードには、少なくとも1つのインパルス出力があります。これらのノードは、ワールドの状態を変えることができます。;例、Writeノード
- 一時的
- データの一部は、インパルス中にのみ存在する場合、一時的です。 たとえば、On Collision StartのICollider出力は、衝突によってトリガーされたインパルス中にのみ存在します。
- キャスト
- データが適切なタイプでない場合に自動的に作成されるノード。キャストは精度を失う可能性があります(たとえば、float-to-intは小数を失い、floatが大きすぎると大幅に間違っている可能性があります)。
- 値
- 値型は、いくつかのデータを直接格納します。ユーザーとスロットを除いて、ノードピッカーのほとんどのタイプは値タイプです。
- 参照
- 参照型は他のものを指しています。ユーザーとスロットは、参照タイプの一般的な例です。これらは値型とは異なる方法で処理されることが多く、ワールドで何かを変更したい場合に必要です。
- スロット
- ワールド内のすべて。スロットには他のスロットを含めることができます。
- コンポーネント
- 機能を追加するために、スロットに取り付けるもの。
- プロパティ
- スロットに保存されているデータ。プロパティは、refノードで参照するか、ドライブノードで駆動するか、インターフェイスカードで直接読み取ることができます。
- インターフェースカード
- スロットやコンポーネントからプロパティを読み取ったり、プロパティのドライブノードを生成したりできるLogiXノード。
- ドライブノード
- プロパティを制御するノード。 プロパティの値を他の値から計算されたものに直接置き換えます。つまり、各クライアントはそれをローカルで処理できます。 参照プロパティを駆動することはできません。
- 参照(ref)ノード
- 参照を含むノード。Writeのようなものを与えるにはrefノードが必要です。
- Write
- 書き込みは、値を一度だけ設定することです。 書き込みはネットワーク上で共有されます。ドライブされているプロパティへの書き込みはできません(ドライバーが書き込みをリッスンしている場合を除きます)。
- Drive
- ドライブとは、別の値に基づいて値を継続的に制御することです。ドライブは各ユーザーによって処理されます。ネットワーク上では何も共有されません。一度に1つのものだけがプロパティをドライブできます。
- ダミー(Dummy)
- ノードのダミーは、型が与えられたときに、より具体的なノードになることができるノードです。たとえば、Writeは任意の値型を書き込むことができ、それに接続されているものと一致するように色を切り替えます。
- オーバーロード
- オーバーロードとは、ノードが別の型に変換することです。ノードがオーバーロードして、int、float、shortなどへ変換されます。Writeノードがオーバーロードし、デフォルトのダミー型から特定の値型に切り替わります。
- 壊れた(Broken)
- ノードが無限ループに関与している場合、ノードは 壊れたになります。問題のあるノードは赤になり、LogiXツールチップでリセットする必要があります。
ノート
LogiXに関連するいくつかの既知のバグ:
- キャストノードから出ているワイヤーをつかむと、キャストが破壊されて例外が発生し、ツールチップの装備が解除されます。
- インターフェイスカードは、ワールド中のすべてのプレーヤーに対して生成されます。1枚を除くすべてのカードが機能しなくなります。"Clean Interfaces"ツールは、これをクリーンアップするのに役立ちます。