VRCSDK3 ワールド作成 – ボタンを押したときの同期のしかた(cyan_trigger)

vrchat 用ワールドのイベント処理

ボタンを押したときの同期のしかたですが、Udonsharp は直に使わず、cyan_trigger を使ってます。
以下のようにしてみました。合ってるかわかりませんが動いています。
UI の同期のしかたがわからないので、球体をボタンにしてます。
Unity で普通に UI を作り大きさを合わせて設置します。
ラジオボタンの位置に球体を適当に大きさを合わせて設置します。
球体にAdd ComponentからCyan Triggerを追加します。
Add EventからInterructを指定して挿入します。ここではLocal のままにします。
Actionsにオーナーを設定するためのNetworking.SetOwnerと、他のCyan Triggerにイベントを送るためにSendCustomEventを追加します。
Cyan Trigger の0.4以降からはCyan TriggerのSendCustomEventはなくなっており、UdonBehaviour.SendCustomEventになっています。
SetOwnerにはLocal Playerとイベントの送り先Sub_Spaceにします。
(このワールドでは宇宙の中を移動するために、宇宙のほう(Sub_Space)を移動させて、自分がいる宇宙船はUnityの中では動かさないようにしています)
SendCustomEventではInputの一覧に、ヒエラルキーからSub_Spaceのオブジェクトをドロップして指定して、_Set_Earthを指定します。
他のボタンも似たようにします。
このワールドでは各シーンを指定できます。各シーンに応じた惑星を移動させたり、宇宙船などのオブジェクトを動かします(アメリカ映画のインターステラーの再現ワールドです)。

Sub_Spaceオブジェクトの設定をします。
Add ComponentからCyan Triggerを追加します。
シーンの状態を示すint変数を追加します。
Variablesの下の+を押してint変数を追加して名前(sub_space_state)を指定します。
最初は1が選択されるので1を指定します。横の設定値は「Synced」にします。
メニュー選択後に他の人がJoinしてきたら、今選択されている番号のシーンに切り替わりましたが、アニメーションは最初から再生されました。
別途アニメーションの再生位置も同期しないといけないことがわかりました。ここでは無視して先に進みます。

Cyan Triggerのカスタムイベントを定義します。
Add EventからCustom Eventを指定して、Nameに_Set_Earthを記載します。
このイベントの処理はCyan Triggerの変数を変更するだけにします。☆マークのvalue -> int -> int.setを指定します。
inputに設定する値とoutputにCyan Triggerの変数を指定します。これをシーン分つくります。

次に、変数が変化したときの処理を作ります。
Add EventでData -> OnVariableChangedを追加します。変数の値が変化したときに動くイベントです。
参照する変数(sub_space_state)を指定します。
AnyoneとSend To Allはこれで良いのかわかりません。
Actionsを指定していきます。
ここでは
if 文でシーン1かを判断し、1なら処理。if 文の elseif 文で次のシーン2かを判断していくことにしています。
if の condition に適当な名前を指定します(適当でいいのか不明)。
☆から value -> int -> int.Equality を指定します。int を 2つ追加し、1つ目はvariable の sub_space_state を指定。2つ目は比較内容の1を指定します。
out boolはcond_to_earthを指定します(condition variableにした値)。これを if の中の Condition(“cond_to_earth") の中へ移動させます。
次は ConditionBodyの中です。
処理は以下のように記載しています。
実際に記載するときは必要な処理で良いと思います。
1. 他のCyan TriggerへSendCustomEventを送る (宇宙船のアニメーション開始)
2. アニメーションの再生位置をスタート位置にするためにfloatを送る。
3.現在の状態を示す変数に1をセット。
4.メニューの選択されてないシーンのマテリアルを水色にセット。
5.メニューの選択されているシーン(1)のマテリアルを青色にセット。
等の処理をしています。
アニメーションの制御はSDK2アイコンのAnimationsの一覧から適切なものを指定してイベントを設定しました。
マテリアルの変更はSDK2アイコンのMaterialsからRenderer.SetMaterialを指定して選択したメニューの球体の色を変更しています。
主にボタンを押したらアニメーションを開始したりするのがほとんどなのでこのようにしています。