我的玩家角色使用Animator在世界各地移动并激活了根运动.基本上,AI系统设置Animator的速度,Animator反过来控制控制角色运动的动画片段.由于这是一个标准功能,可确保非常逼真的动画而无法
使用NetworkTransform和NetworkAnimation在网络上同步字符会导致这两个组件发生冲突:
> NetworkTransform将字符移动到主机命令的任何位置.
> NetworkAnimator会同步动画变量并在主持人指示时播放动画片段,而这些动画片段也会应用根动作.
结果是精确的(意味着角色到达确切的目标目的地),但非常卡顿运动(明显的跳跃).
删除NetworkTransform后,角色的主机和客户端实例会非常快速地失去同步,这意味着当完全由与时序相关的Animator控制时,它们将最终位于世界的不同位置.
如果有任何动画,则删除NetworkAnimator,客户端实例将不会播放与主机相同的动画.
我尝试在禁用Animator的根运动时保留两个组件(仅在客户端上).但是,在这种情况下,NetworkTransform似乎根本没有内插.角色只是以约0.02个单位的步长从同步位置跳到同步位置.与旋转相同.
NetworkTransform配置为“同步转换”,因为该字符既没有RigidBody也没有CharacterController.所有其他值都是默认值:同步速率为9(也尝试更高的值),移动阈值为0.001,捕捉阈值为5,插值移动= 1.
如何在网络上获得流畅的基于动作的运动?我希望这是一个标准的场景……
您需要的是在非本地实例上取消Root Motion标记,但也要插入旋转,而不仅仅是移动.此外,1的插值似乎很高,与5的阈值相同:除非你没有使用Unity标准,其中1单位= 1米,否则这些看起来不太现实.运动时插补25厘米(0.25),旋转插补3度. 9的同步速率可能已足够,但根据我的经验,它必须根据数据包丢失重新计算.