JMAS Asked: 2024-12-06 03:36:33 +0800 CST2024-12-06 03:36:33 +0800 CST 2024-12-06 03:36:33 +0800 CST Unity 6 - 动画剪辑导致玩家无法移动 772 我制作了一些额外的动画剪辑,它们的存在导致玩家无法移动。我不知道为什么,当我删除新的动画剪辑时,我可以再次移动玩家。我尝试撤消代码以查看是否是代码问题,但事实并非如此。 unity-game-engine 3 个回答 Voted Best Answer derHugo 2024-12-06T18:08:47+08:002024-12-06T18:08:47+08:00 一旦 AnimatorController 中存在的动画在属性上拥有任何关键帧 - 即使该剪辑/状态当前未播放 - 该属性基本上被 Animator 锁定/拥有,因此您无法从脚本中覆盖它。 LateUpdate一种方法是在或使用中设置内容WaitForEndOfFrame,因为这是在动画更新循环之后执行的。两者都很脏,因为它基本上是“对抗”Animator并在已经设置它们之后覆盖值Animator=> 您不能依赖于增量移动,因为与此同时 Animator 可能已经重置了属性。 另一种方法是使用一个不具有新内容AnimatorController的基础来为位置设置动画,而只使用相应状态。AnimationClips 然后,仅当需要这些剪辑并且对象应该通过动画移动时,才使用AnimatorOverwriteController才有相应动画。 否则,如上所述,您还可以将播放器嵌套在另一个根对象下,通过脚本移动根,并且仅相对于该根对象为播放器设置动画。 Bekranker 2024-12-06T09:44:54+08:002024-12-06T09:44:54+08:00 这可能是因为您的动画改变了您想要移动的一个游戏对象的位置值。 如果您想在动画中移动对象,请创建一个父游戏对象并为其设置动画。 旋转和缩放也同样如此。 Skindin 2024-12-07T08:02:31+08:002024-12-07T08:02:31+08:00 这个动画是做什么用的?如果它正在更新本地位置,而另一个脚本要移动相同的变换,它就不会移动。你说它没有播放动画,说实话我不太确定,但如果你有一个动画移动你的角色最高(在层次结构中)的变换,它可能总体上是坏的,可能会导致问题。
一旦 AnimatorController 中存在的动画在属性上拥有任何关键帧 - 即使该剪辑/状态当前未播放 - 该属性基本上被 Animator 锁定/拥有,因此您无法从脚本中覆盖它。
LateUpdate
一种方法是在或使用中设置内容WaitForEndOfFrame
,因为这是在动画更新循环之后执行的。两者都很脏,因为它基本上是“对抗”Animator
并在已经设置它们之后覆盖值Animator
=> 您不能依赖于增量移动,因为与此同时 Animator 可能已经重置了属性。另一种方法是使用一个不具有新内容
AnimatorController
的基础来为位置设置动画,而只使用相应状态。AnimationClips
然后,仅当需要这些剪辑并且对象应该通过动画移动时,才使用
AnimatorOverwriteController
才有相应动画。否则,如上所述,您还可以将播放器嵌套在另一个根对象下,通过脚本移动根,并且仅相对于该根对象为播放器设置动画。
这可能是因为您的动画改变了您想要移动的一个游戏对象的位置值。
如果您想在动画中移动对象,请创建一个父游戏对象并为其设置动画。
旋转和缩放也同样如此。
这个动画是做什么用的?如果它正在更新本地位置,而另一个脚本要移动相同的变换,它就不会移动。你说它没有播放动画,说实话我不太确定,但如果你有一个动画移动你的角色最高(在层次结构中)的变换,它可能总体上是坏的,可能会导致问题。