Unity [UNET] 同步非玩家对象的变换未能正常工作

11

我正在尝试使用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教程,将我的物体设置与敌人案例完全相同,但它也无法使客户端和服务器中的变换保持同步。

我相信我肯定做了什么非常愚蠢的事情,所以任何提示都非常欢迎!

2个回答

4

重要..2018年..

我们已确定

如果你在开发过程中使用本地主机,尤其是在Mac上,NetworkTransform存在一些不稳定性。

这真的很麻烦。一定要在普通局域网上使用几台机器进行测试。


1

找到了解决方案。某种方式,物体中的网络变换组件被设置为“同步 3D 刚体”,而不是在参数“变换同步模式”中设置为“同步变换”。改为同步变换后,问题得到解决,不再出现“磁性”或“弹性”效果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接