同步问题(统一+光子):第2部分

我们首次尝试使用光子组件同步球。

本文是从同步问题(Unity + Photon)开始的系列文章的一部分:第1部分

光子变换视图

Photon教程使用Photon Transform View同步播放器的位置

此类可帮助您同步GameObject的位置,旋转和比例。 它还为您提供了许多不同的选项,即使在每秒仅发送两次数据的情况下,也可以使同步值显得平滑。 只需将组件添加到您的GameObject中,并确保将PhotonTransformView添加到观察到的组件列表中

Photon — 图库照片

让我们从使用这种方法开始。 只需将“ 光子变换视图”添加到Ball预制件中,并将其指定为Ball的“ 光子视图” 组件上的“ 观察组件 ”即可。

有了这个,行为看起来就相当同步了。

观察结果:

  • 第二位玩家(右)与第一位玩家(左)基本上具有相同的感受,但是有点延迟。
  • 尽管文档尚不清楚,但是该行为表明,实例化球的左侧应用程序正在控制右侧应用程序中球的位置。

光子刚体视图

此类可以帮助您同步物理RigidBody的速度。 请注意,只有速度是同步的,并且由于Unitys物理引擎不是确定性的(即结果在所有计算机上并不总是相同的),因此对象的实际位置可能不同步。 如果要在所有客户端上使该对象的位置相同,则还应该添加一个PhotonTransformView来同步该位置。

Photon — 图库照片

从文档中看,在这种情况下,还应该添加一个Photon Rigidbody View组件并将其添加为Observed Component ,这是正确的做法。

注意 :在此示例中,这对同步的显示方式没有明显影响。

网络滞后

让我们考虑网络延迟,aka,ping或RTT(往返时间)如何影响我们球的位置同步。

许多人认为,快速响应的Internet连接仅取决于良好的下载和上传速度,但除此之外,还有更多。 还有ping,这实际上是一个反应时间。 如果您的ping为98毫秒(毫秒),则这是您的计算机响应另一台计算机的请求所花费的时间。

小于20ms的ping被认为是很好的,而大于150ms的任何东西都可能导致明显的滞后。

—技术顾问— 如何降低ping

我们可以使用Photon Lag Simulation Gui组件,例如将其添加到GameManager游戏对象中,以在各种网络条件下测试应用程序。

看起来我家的151毫秒RTT只是边缘。

考虑到Photon的工作原理,每个应用程序都在与Photon服务器通信,实际上它需要两个播放器的RTT之和才能在应用程序之间传递信息。 例如300ms。 因此,回顾一下我们首次尝试使球的运动同步,我们现在可以更好地了解延迟。

在这两个应用程序实例中,我都启用了模拟滞后(两个应用程序的RTT均为340ms左右)。 由于组合延迟约为700毫秒,因此在应用程序之间传递的信息之间,我们接近了整整一秒钟。

观察结果:

  • 球在左侧(实例化的球)的移动符合预期。
  • 右边的球的运动像以前一样延迟(但明显更多)
  • 右边的球的运动也很生涩。 在某些情况下,它似乎甚至没有碰到墙。

下一步

在下一篇文章“ 同步问题(Unity +光子):第3部分”中 ,我们探讨了网络延迟可能带来的一些更基本的问题。