4

我的玩家角色使用激活了根运动的 Animator 在世界各地移动。基本上,AI 系统在 Animator 上设置速度,进而控制控制角色运动的动画剪辑。由于这是一个标准功能,可以确保非常逼真的动画没有明显的滑动,我认为这是一个好主意......直到我添加了网络同步。

使用 NetworkTransform 和 NetworkAnimation 在网络上同步角色会导致这两个组件发生冲突:

  • NetworkTransform 将角色移动到主机命令的任何位置。
  • NetworkAnimator 同步动画变量并按照主机的指示播放动画剪辑,而这些动画剪辑也应用根运动。

结果是精确的(意味着角色到达了确切的目标目的地),但动作非常卡顿(明显的跳跃)。

移除 NetworkTransform,角色的主机和客户端实例会非常快速地去同步,这意味着当它们完全由依赖于时间的 Animator 控制时,它们最终将位于世界上的不同位置。

移除 NetworkAnimator,客户端实例将不会播放与主机相同的动画,如果有的话。

我尝试在禁用 Animator 的根动作的同时保留两个组件(仅在客户端上)。然而,在这种情况下,NetworkTransform 似乎根本没有插值。角色只是以大约 0.02 个单位的步长从同步位置跳到同步位置。与旋转相同。

NetworkTransform 配置为“同步变换”,因为角色既没有 RigidBody 也没有 CharacterController。所有其他值都是默认值:同步速率为 9(在那里也尝试了更高的值),移动阈值 0.001,捕捉阈值 5,插值移动 = 1。

如何在网络上获得流畅的根部运动?我希望这是一个标准的场景......

4

1 回答 1

0

您需要在非本地实例上禁用 Root Motion 标志,还要插入旋转,而不仅仅是移动。

此外,插值 1 似乎很高,与阈值 5 相同:除非您不使用 Unity 标准,其中 1 单位 = 1 米,否则这些似乎不现实。我会有一个 25 厘米(0.25)的运动插值和一个 3 度的旋转插值。9 的同步率可能就足够了,但根据我的经验,它必须根据数据包丢失重新计算。

于 2017-11-14T14:05:20.080 回答