在 Unity 中,如何防止动画干扰运动?

In Unity, how to prevent animations from messing with the movement?

问题:

我有一个带有 Nav Mesh Agent 组件的角色模型。它可以完美地移动到我告诉它移动的任何目的地(使用 NavMeshAgent.destination 属性)。

但是当我使用从商店下载的动画控制器时,这突然失败了。该角色不会 运行 它是目的地;相反,它会无休止地 运行 围绕它转圈。

我不确定为什么会这样,但我想 运行ning 动画会以某种方式削弱角色的转动能力。 Inspector 在相关 .fbx 文件的导入设置中显示:Average Angular Y Speed: 0.0 deg/s.

我真的,真的不明白为什么即使我已经明确地将 NavMeshAgent.updatePositionNavMeshAgent.updateRotation 属性设置为 true,为什么这种情况仍然发生。按照我对 documentation 的理解,这应该让角色像 Nav Mesh Agent 想要的那样移动,而不是其他任何东西(包括动画)想要它移动?

我该如何解决这个问题?我应该如何强制动画不干涉运动?

将所有动画就地并使用代码进行移动,您可以取消选中root motion 并使用状态机值来获得更好的运动或使用根运动并让 mecanim 的重定向引擎进行混合所以自己去看看什么能让你得到更好的结果,所以我猜你的问题是你的动画不是到位。

首先:Unity 最大的优点之一是它的 mecanim。禁用根运动正在否定一个很大的优势。

其次:您的角色 运行 出现的原因可能是因为动画师和导航网格代理发出了相互冲突的命令。将 updatePosition 设置为 false,将 updateRotation 设置为 true。因此,动画师控制你移动的速度,导航网格代理控制 angular 速度。其他可能的原因是您的目的地无法到达。检查向量的 Y 分量并确保它们共面。