移动物体
NetworkTransform 复制位置、旋转和缩放,物体静止时完全不发送任何东西。
给物体加上 NetworkTransform 然后移动它就行。拥有它的客户端负责发送,其他客户端负责回放,静止的物体不花任何代价。
为什么不用连续同步
Udon 自带的连续同步会按固定间隔复制,不管物体有没有动,并用一条谁也没选过的曲线做平滑。NetworkTransform 只在某个通道确实变化超过阈值时才发送,并且自己做插值,所以静止的物体每帧只是一次比较,而不是一个数据包。
设置项
SyncPosition、SyncRotation、SyncScale |
哪些通道会被传输 |
SendRate |
移动时每秒发送次数 |
MinPositionChange、MinRotationChange、MinScaleChange |
一个通道变化多少才值得发送 |
ResendInterval |
用来修复丢失更新的心跳 |
TeleportDistance |
超过它的跳变按瞬移回放,而不是插值 |
LastSentBytes 和 DroppedSends 可以在运行时读取,方便你知道一个移动中的物体实际花了多少。
和 pickup 一起用
同一个物体上有 VRC_Pickup 时,拿起它会取得所有权,所以拿着它的人就是发送方;放下时会发送静止的姿态。不用额外接线。
该期待什么
回放比发送晚一拍。 每个到达的快照会从前一个开始,在两者到达的间隔内播放,得到的是匀速的段落,而不是朝一个每秒跳十次的目标缓动时那种“一冲一停”。代价是在网络本身的延迟之外,再加一个发送间隔的延迟。
没被碰过的物体,对晚来的人不发一个包也是对的,因为场景本身已经带着它的位置。从未收到过快照的客户端会让 transform 保持序列化时的样子。
只有所有者会写。 拥有该物体的客户端从不对自己的移动做插值,所以你手里拿着的东西是你自己的动作,而不是被回放的一份副本。