Unity / UNET,客户端对象在销毁之前与服务器的行进距离不同

时间:2019-05-29 22:07:12

标签: unity3d unity3d-unet

我有一个使用High Level Networking API的2019.1.0f2 2D项目。

物理是完全由服务器控制的。
没有互动的玩家权威游戏对象。
场景中的人物互相射击。
项目符号是具有网络标识的预制件。
服务器使用 NetworkServer.Spawn(prefab); 生成子弹。
项目符号具有 Network Transform ,具有 Transform Sync Mode:Sync Regidbody 2D
子弹的逻辑如下:

  void OnTriggerEnter2D(Collider2D col) {
    if (isServer) {
          NetworkServer.Destroy(gameObject);
     }
  }


所有功能均可在服务器上正常运行。

但是在客户端上,我发现子弹游戏对象在子弹到达目标之前已被破坏。换句话说,如果我从项目符号的起点到项目符号的终点画一条线,则服务器模拟上的线会更长。

项目符号的移动速度非常快,所以我的假设是,客户端在获得物理仿真之前,已经获得 NetworkServer.Destroy 命令,直到销毁项目符号时服务器仿真所在。

作为一种测试,我替换了 NetworkServer.Destroy(gameObject);使用 gameObject.setActive(false); 。这当然不会破坏客户端上的项目符号,但是会导致项目符号在服务器上被破坏的位置停止。这是我想要的行为。只有我希望这些物体真正被销毁。我可以想到一些使用 gameObject.setActive(false); 的方法来实现此目的,但是它们似乎很笨拙。

我的问题是:有没有一种最佳实践,可以使子弹在其经过与服务器上相同的路径之前不被销毁?

还是上面的东西是假的,我在做傻事?

非常感谢您的帮助!

0 个答案:

没有答案