【Udon】同期のやりかた
位置、回転の同期
従来のVRCSDKではVRC_ObjectSyncで行っていたが、UdonではUdon BehaviourのSynchronize Positionにチェックすることで同様の機能が利用できる。
https://aws1.discourse-cdn.com/business5/uploads/tupper_test/original/1X/c608b1f95d96745fb928131c5eaf42c059c4f261.png
Animationの同期
このページを書いた2020年4月4日時点で未実装らしい。
UdonBehaviourで利用している変数の同期
Udonでは各変数ごとにプレイヤー間で値を同期させるかどうかを設定可能。
このページを書いた2020年4月4日時点では「bool, char, byte, int, long, unsigned byte, unsigned int, unsigned long, float, double, short, unsigned short, string, Color, Color32, Quaternion, Vector2/3/4」といった基本的な型のみが同期に対応している。
(配列型などの同期にはまだ対応していない)
同期の補間方法についても設定可能。謎。
(流石に毎フレーム同期が走っているわけでは無さそう?あるいは同期処理が抜け落ちた際の補間だろうか…?)
まだ不具合があるらしく、float型以外はnoneにしておいたほうが良さそう。
Syncedにチェックを入れて同期設定を行った変数に対して値をセットできるのはNetwork Ownerのみ。
Network OwnerはデフォルトではMasterにアサインされており、以下の条件で変化する。
Masterが変わったとき
そのオブジェクトが他のオブジェクトと衝突したとき(Allow Ownership Transfer ....にチェックを入れたときのみだろうか?)
そのオブジェクトをPickupしたとき
Networking.SetOwnerを利用した時
Custom Events の同期
ネットワークをまたいで(全プレイヤーに対して)CustomEventsを発火する際は Send Custom Network Event を利用する。
UnityのPlay-modeでは Send Custom Network Event は動作しないらしいので注意。
つまり、Network Eventとして送信されない限り所謂Localとして実行される。
U#ではあるが、より具体的に説明されているので紹介