我正在尝试使用UNET同步Unity中的一个非玩家游戏对象的变换。基本上,我有一个可以与该对象对抗并移动它的玩家,并且我希望在服务器和客户端中以相同的方式更改该对象的变换。
我遵循了教程https://unity3d.com/learn/tutorials/topics/multiplayer-networking/handling-non-player-objects?playlist=29690,并成功地让玩家+子弹示例工作。然后我创建了一个新对象,加入了具有本地玩家权限和网络变换(每秒更新1次)的网络身份,创建了一个预制件,并将其添加到网络管理器作为“已注册的可生成预制件”。
我认为这就足够了,但由于对象的变换在服务器和客户端中没有以相同的方式更新,因此它无法正常工作。在服务器上,碰撞非常奇怪(例如,直接移动对象有时会使其反弹),但是可以将对象移动到特定位置并保持在那里。在客户端上,当玩家触摸对象时,碰撞非常平稳,然后对象具有某种磁性效应,始终将其带回服务器端的对象变换。
我查看了以下其他问题:1)Unity [UNET] Sync non-player object transform 2)How do I sync non-player GameObject properties in UNet/Unity5? 和3)UNET - Sync. script for color on non-player object,但我无法理解1)中的解决方案以及如何使用SyncVar来同步变换(以及是否实际上是最佳解决方案)。
我也尝试了上面的Unity教程,将我的物体设置与敌人案例完全相同,但它也无法使客户端和服务器中的变换保持同步。
我相信我肯定做了什么非常愚蠢的事情,所以任何提示都非常欢迎!