当前位置 : 主页 > 手机开发 > 无线 >

unity3d – 使用NetworkTransform和NetworkAnimator进行流畅的移动

来源:互联网 收集:自由互联 发布时间:2021-06-10
我的玩家角色使用Animator在世界各地移动并激活了根运动.基本上,AI系统设置Animator的速度,Animator反过来控制控制角色运动的动画片段.由于这是一个标准功能,可确保非常逼真的动画而无法
我的玩家角色使用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的同步速率可能已足够,但根据我的经验,它必须根据数据包丢失重新计算.

网友评论