【发布时间】:2018-08-03 15:33:43
【问题描述】:
我正在尝试使用 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 教程,将我的对象设置为与敌人的情况完全一样,但它也无法保持客户端和服务器中的转换同步。
我确信我在做一些非常愚蠢的事情,所以非常欢迎任何提示!
【问题讨论】:
标签: c# unity3d unity3d-unet