Unity [UNET] 同步非玩家对象转换不工作
Unity [UNET] Sync non-player object transform not working
我正在尝试使用 UNET 在 Unity 中同步一个非玩家游戏对象的变换。基本上我有一个玩家可以对抗那个对象并移动它,我希望那个对象的转换在服务器和客户端中以相同的方式改变。
我按照教程 https://unity3d.com/learn/tutorials/topics/multiplayer-networking/handling-non-player-objects?playlist=29690 进行操作,可以使播放器 + 子弹示例运行良好。然后我创建了一个新对象,向其添加了具有本地玩家权限的网络身份和网络转换(更新 1 秒),创建了一个预制件并将其作为 "Registered Spawnable Prefab" 添加到网络管理器中。
认为这就足够了,但它不起作用,因为对象转换在服务器和客户端中的更新方式不同。在服务器中,碰撞是非常奇怪的(例如,对物体的直线运动有时会使其跳回)但物体可以移动到某个位置并停留在那里。在客户端,当玩家触摸对象时,碰撞非常平滑,然后对象具有某种磁力效果,总是将其带回服务器端对象的变换。
我检查了这些其他问题:1) Unity [UNET] Sync non-player object transform 2) and 3) UNET - Sync. script for color on non-player object,但我无法理解 1) 中的解决方案以及如何使用 SyncVar 同步转换(如果这实际上是最佳解决方案)
我还尝试了上面的 Unity 教程,将我的对象设置得与敌人的情况完全一样,但它也无法在客户端和服务器中保持转换同步。
我确定我在做一些非常愚蠢的事情,所以非常欢迎任何提示!
找到解决方案。对象中的网络转换组件以某种方式设置为 "Sync 3D Rigid Body" 而不是参数 "Transform Sync Mode" 中的 "Sync Transform"。更改为同步转换反而解决了问题,"magnetic" 或 "elastic" 效果不再发生。
2018 年重要..
我们确定了
如果您在开发期间使用 localhost,NetworkTransform 会有一些问题,尤其是在 Mac.
上
这是真正的 PITA。一定要用几台机器在普通局域网上测试。
我正在尝试使用 UNET 在 Unity 中同步一个非玩家游戏对象的变换。基本上我有一个玩家可以对抗那个对象并移动它,我希望那个对象的转换在服务器和客户端中以相同的方式改变。
我按照教程 https://unity3d.com/learn/tutorials/topics/multiplayer-networking/handling-non-player-objects?playlist=29690 进行操作,可以使播放器 + 子弹示例运行良好。然后我创建了一个新对象,向其添加了具有本地玩家权限的网络身份和网络转换(更新 1 秒),创建了一个预制件并将其作为 "Registered Spawnable Prefab" 添加到网络管理器中。
认为这就足够了,但它不起作用,因为对象转换在服务器和客户端中的更新方式不同。在服务器中,碰撞是非常奇怪的(例如,对物体的直线运动有时会使其跳回)但物体可以移动到某个位置并停留在那里。在客户端,当玩家触摸对象时,碰撞非常平滑,然后对象具有某种磁力效果,总是将其带回服务器端对象的变换。
我检查了这些其他问题:1) Unity [UNET] Sync non-player object transform 2)
我还尝试了上面的 Unity 教程,将我的对象设置得与敌人的情况完全一样,但它也无法在客户端和服务器中保持转换同步。
我确定我在做一些非常愚蠢的事情,所以非常欢迎任何提示!
找到解决方案。对象中的网络转换组件以某种方式设置为 "Sync 3D Rigid Body" 而不是参数 "Transform Sync Mode" 中的 "Sync Transform"。更改为同步转换反而解决了问题,"magnetic" 或 "elastic" 效果不再发生。
2018 年重要..
我们确定了
如果您在开发期间使用 localhost,NetworkTransform 会有一些问题,尤其是在 Mac.
上这是真正的 PITA。一定要用几台机器在普通局域网上测试。