我有一个使用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); 的方法来实现此目的,但是它们似乎很笨拙。
我的问题是:有没有一种最佳实践,可以使子弹在其经过与服务器上相同的路径之前不被销毁?
还是上面的东西是假的,我在做傻事?
非常感谢您的帮助!