オブジェクトを動かす
NetworkTransform は位置・回転・スケールを複製し、止まっている間は何も送りません。
オブジェクトに NetworkTransform を付けて動かすだけです。所有しているクライアントが送り、ほかのクライアントが再生します。止まっているオブジェクトは何も消費しません。
連続同期を使わない理由
Udon の連続同期は、動いていてもいなくても一定間隔で複製し、誰も選んでいないカーブで補間します。NetworkTransform はしきい値を超えて実際に変わったチャンネルだけを送り、補間も自前で行います。静止しているオブジェクトは 1 フレームに 1 回の比較だけで、パケットは出ません。
設定
SyncPosition、SyncRotation、SyncScale |
どのチャンネルを送るか |
SendRate |
動いている間の 1 秒あたりの送信回数 |
MinPositionChange、MinRotationChange、MinScaleChange |
送る価値がある変化量 |
ResendInterval |
取りこぼしを直すためのハートビート |
TeleportDistance |
これを超える移動は補間せず、瞬間移動として再生します |
LastSentBytes と DroppedSends は実行時に読めます。動いているオブジェクトが実際にどれだけ使っているかを知りたいときに。
ピックアップと組み合わせる
同じオブジェクトに VRC_Pickup があれば、持った人がオーナーになるので、その人が送り手になります。放すと静止した姿勢が送られます。追加の配線は要りません。
見え方
再生は 1 送信ぶん遅れます。 届いたスナップショットは、その前のものから、到着間隔をかけて再生されます。1 秒に 10 回跳ぶ目標へ近づけるときの「跳ねては減速する」動きではなく、等速の区間になります。代償は、ネットワーク自体の遅延に加えて 1 送信間隔ぶんの遅れです。
触られていないオブジェクトは、パケット 1 つなしで、あとから入った人にも正しく見えます。 位置はシーン自体が持っているからです。スナップショットを一度も受け取っていないクライアントは、シリアライズされたままの姿勢を保ちます。
書くのはオーナーだけです。 所有しているクライアントは自分の動きを補間しないので、手に持っているものは再生された複製ではなく自分の動きそのものです。