Cluster
イベント会場向けかと思ってたら、いつの間にかSNSっぽい感じになってた
開発メモ
参考サイト
VRCと同じくトリガーギミック方式
ロジックコンポーネントで演算ができる
同期周りの仕様
すべてのItemにはOwnerが居る
ItemのOwnerは変わる事がある
Interact Item Trigger を設定した Item を使った時、使った人に
Grabbable Item を掴んだ時、掴んだ人に
Item の Owner である Player が退室したり、その Player の通信が途切れた時、そのワールドにいる誰かがランダムに
Item の Owner が位置をサーバーに送り、サーバーはワールドにいる全クライアントに転送する
rigidbody の Is Kinematic が false である Movable Item は、 Owner である場合そのまま動作しますが、 Owner でない場合には Is Kinematic は true となり、受信した位置を(補間しながら)反映するだけです
残念ながら、Udonみたいに何かに連動させてOwnerを変える仕組みは無い模様
自分が持っていない物同士の当たり判定に基づくシステムは軒並み無理
当たり判定を使った仕組みを作るなら、「自分が持ってる物」と「何か」とだけで考えた方が同期の心配しなくて良い
ロジック考察
①計算を開始するトリガ
④
Signalの場合、計算結果がtrueの場合に発火
Signalでない場合、計算結果を保存(変数代入として振る舞う)
⑤計算演算子
計算演算子(数字から数字)
Minus
Add
Multiply
Subtract
Divide
Modulo(mod)
Min
Max
Clamp
比較演算子(数字から真偽値)
Equals
NotEquals
GreaterThan
GreaterThanOrEqual
LessThan
LessThanOrEqual
論理演算子(真偽値から真偽値)
Not
And
Or
その他
=(代入、コピー)
Condition(三項演算子)
おそらく、④がSignalでない場合に使用する物
引数1に応じて、④へ代入する値を引数2,3から選択する
メッセージ考察
トリガが発行するメッセージは大別して2種類存在
Signal
主にイベントの発火に用いる
いくつかのギミック、およびロジックは、Signalを受信しないと動作しない
一方で、Add Continuous Force Item Gimmick や Set Game Object Active Gimmick などは、Signalでは動作しない
Signal以外
主に変数として振る舞う
変数名は識別子(Key)で定義する
変数は各オブジェクトが個別に保有しているので、同じ識別子でも、Itemが異なれば値は変わる
当然、Globalの識別子は世界に1つのみとなる
厳密には、変数の置き場所は3か所
Global 全ユーザで共有する共通領域
Player 各ユーザが個別に持つ共通領域
Item 各アイテムが個別に持つ領域
これを用いたメッセージは、setter_methodに意味合いが近い