Skip to main content

性能考虑

简介​

高效网络是实现 VRChat 中流畅多人体验的关键。优化不佳的网络对象可能导致带宽使用增加、延迟和不同步问题。本指南提供确保网络逻辑优化的最佳实践。

何时使用变量与事件​

变量(同步数据)​

对需要在所有玩家之间复制的持久状态使用同步变量,例如:

  • 游戏中的玩家分数。
  • 门的打开/关闭状态。
  • 任何需要供后来加入者使用的数据。

最佳实践:​

  • 只有在需要频繁小更新时才使用连续同步(例如进度条)。
  • 对于需要始终准确的数据使用手动同步(例如排行榜)。
  • 避免过度使用同步变量,因为过多的同步消息可能导致带宽峰值。

事件(临时操作)​

对于不需要持久化且不需要晚加入者接收的一次性操作,使用事件,例如:

  • 按下按钮时播放动画。
  • 开枪或触发音效。
  • 生成临时视觉效果。

最佳实践:​

  • 谨慎使用 SendCustomNetworkEvent(NetworkEventTarget.All, "EventName")。
  • 避免使用事件进行状态持久化(例如在没有同步变量的情况下设置门为打开状态)。
  • 考虑对不需要网络化的效果使用仅本地逻辑。

减少带宽使用​

避免不必要的同步​

  • 限制网络对象更新:仅在值发生显著变化时发送更新。
  • 优化物理交互:除非必要,否则不要对刚体进行网络同步。
  • 使用插值/外推来平滑移动,而不是发送频繁的位置更新。

优化变量同步​

  • 尽可能将相关变量分组到数组中。
  • 最小化浮点精度(例如,避免同步不必要的高精度值)。
  • 使用二进制标志来同步多个布尔值。

所有权与对象同步的最佳实践​

  • 仅在需要时转移所有权(例如,拾取物等可交互对象)。
  • 避免频繁交换所有权,因为这会引入延迟并可能导致不同步。

测试与调试性能​

  • 使用调试 GUI(--enable-debug-gui) 监控带宽和同步行为。
  • 在真实的多人条件下测试,以观察不同延迟环境中的网络行为。
  • 分析网络消息,确保最小的冗余数据传输。

后续步骤​

如需进一步了解优化网络,请查阅以下相关指南: