性能考虑
简介
高效网络是实现 VRChat 中流畅多人体验的关键。优化不佳的网络对象可能导致带宽使用增加、延迟和不同步问题。本指南提供确保网络逻辑优化的最 佳实践。
何时使用变量与事件
变量(同步数据)
对需要在所有玩家之间复制的持久状态使用同步变量,例如:
- 游戏中的玩家分数。
- 门的打开/关闭状态。
- 任何需要供后来加入者使用的数据。
最佳实践:
- 只有在需要频繁小更新时才使用连续同步(例如进度条)。
- 对于需要始终准确的数据使用手动同步(例如排行榜)。
- 避免过度使用同步变量,因为过多的同步消息可能导致带宽峰值。
事件(临时操作)
对于不需要持久化且不需要晚加入者接收的一次性操作,使用事件,例如:
- 按下按钮时播放动画。
- 开枪或触发音效。
- 生成临时视觉效果。
最佳实践:
- 谨慎使用
SendCustomNetworkEvent(NetworkEventTarget.All, "EventName")。 - 避免使用事件进行状态持久化(例如在没有同步变量的情况下设置门为打开状态)。
- 考虑对不需要网络化的效果使用仅本地逻辑。
减少带宽使用
避免不必要的同步
- 限制网络对象更新:仅在值发生显著变化时发送更新。
- 优化物理交互:除非必要,否则不要对刚体进行网络同步。
- 使用插值/外推来平滑移动,而不是发送频繁的位置更新。
优化变量同步
- 尽可能将相关变量分组到数组中。
- 最小化浮点精度(例如,避免同步不必要的高精度值)。
- 使用二进制标志来同步多个布尔值。
所有权与对象同步的最佳实践
- 仅在需要时转移所有权(例如,拾取物等可交互对象)。
- 避免频繁交换所有权,因为这会引入延迟并可能导致不同步。
测试与调试性能
- 使用调试 GUI(
--enable-debug-gui) 监控带宽和同步行为。 - 在真实的多人条件下测试,以观察不同延迟环境中的网络行为。
- 分析网络消息,确保最小的冗余数据传输。
后续步骤
如需进一步了解优化网络,请查阅以下相关指南: