【问题标题】:In Unity, how to prevent animations from messing with the movement?在 Unity 中,如何防止动画干扰运动?
【发布时间】:2016-09-13 12:43:02
【问题描述】:

问题:

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

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

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

我真正非常不明白的是,为什么即使我已明确将 NavMeshAgent.updatePositionNavMeshAgent.updateRotation 属性设置为 true,这种情况仍然会发生。我理解documentation 的方式,这应该使角色移动,因为Nav Mesh Agent 希望它移动,而不是其他任何东西(包括动画)希望它移动?

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

【问题讨论】:

    标签: unity3d navmesh unity3d-mecanim


    【解决方案1】:

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

    【讨论】:

    • 谢谢您,先生。检查Apply Root motion 就像一个魅力。但是,如果我可能会问,为什么 NavMeshAgent.updatePositionNavMeshAgent.updateRotation 没有效果?
    • 嗨@Milad Qasemi!我取消选中根运动并将我的动画设置为“就地”。角色现在是动画的,但它不会从 A 点移动到 B 点。 RigidBody.movePosition(...) 停止工作。
    【解决方案2】:

    首先:Unity 最大的优点之一是它的机制。禁用根运动是一个很大的优势。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 1970-01-01
      • 2020-10-15
      • 1970-01-01
      相关资源
      最近更新 更多