NetworkTransform&amp ;;的流畅运动NetworkAnimator

时间:2017-06-29 15:26:46

标签: unity3d unity3d-unet

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

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

  • NetworkTransform将角色移动到主机命令的任何位置。
  • NetworkAnimator会同步动画变量并在主持人指示时播放动画片段,而这些动画片段也会应用根动作。

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

删除NetworkTransform,角色的主机和客户端实例非常快速地同步,这意味着当它们仅由与时间相关的动画师控制时,它们将最终位于世界的不同位置。

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

我尝试在禁用Animator的根运动时保留两个组件(仅限客户端)。但是,在这种情况下,NetworkTransform似乎根本没有内插。角色只是以约0.02个单位的步长从同步位置跳到同步位置。与轮换相同。

NetworkTransform配置为“同步转换”,因为该字符既没有RigidBody也没有CharacterController。所有其他值都是默认值:同步速率为9(也尝试更高的值),移动阈值为0.001,捕捉阈值为5,插值移动= 1.

如何在网络上获得流畅的基于动作的移动?我希望这是一个标准的场景...

1 个答案:

答案 0 :(得分:0)

您需要的是在非本地实例上取消Root Motion标记,但也要插入旋转,而不仅仅是移动。

此外,1的插值看起来很高,与5的阈值相同:除非你没有使用1单位= 1米的Unity标准,否则这些看起来不太现实。运动时插补25厘米(0.25),旋转插补3度。 9的同步速率可能已足够,但根据我的经验,它必须根据数据包丢失重新计算。