Unity Animator中Walk状态HumanoidWalk动画为何延迟5秒以上启动?
问题背景
- 已在Animator中新增类型为
Trigger、名为Walk的参数,相关配置截图如下:- 状态与参数配置:

- 状态过渡配置:

- 状态与参数配置:
- 项目
Update生命周期函数中实现逻辑如下:
private void Update() { if (startRotating) { if (rotateTowards) { if (rotateTowardsObject) { anim.SetTrigger("Walk"); Vector3 targetDirection = objectToRotatetowards.position - transform.position; float singleStep = rotationSpeed * Time.deltaTime; Vector3 newDirection = Vector3.RotateTowards(transform.forward, targetDirection, singleStep, 0.0f); transform.rotation = Quaternion.LookRotation(newDirection); } } } }
- 异常表现:运行时
rotateTowardsObject标识位置为true后,旋转逻辑会立即执行,但Walk状态对应的HumanoidWalk动画需要等待5秒甚至更长时间才会开始播放。
故障原因
故障由代码逻辑和Animator配置两个问题共同导致:
- Trigger参数被重复调用重置
当前代码将anim.SetTrigger("Walk")放在Update的持续判断分支中,只要rotateTowardsObject为true,每帧都会调用一次SetTrigger。Unity Animator的Trigger参数机制为:若调用SetTrigger时不满足过渡触发条件,下一次重复调用SetTrigger会重置之前的触发信号,导致触发信号被反复刷新,始终无法等到有效触发时机。 - 状态过渡配置了固定退出时间
从数秒延迟的现象判断,当前状态到Walk状态的过渡开启了Has Exit Time选项,且退出时间点设置为当前动画播放总时长的末尾位置(例如当前Idle动画时长为5秒,Exit Time设置为0.95左右就会等到动画接近播放完成才允许过渡),同时未配置过渡打断规则,导致必须等当前动画播放到设定的退出时间点,才会响应Trigger信号完成状态切换。
修复方案
代码调整
将SetTrigger的调用从帧循环的持续判断中移出,仅在rotateTowardsObject从false变为true的瞬间调用一次,避免重复重置Trigger信号,参考代码如下:
// 缓存上一帧的旋转标识状态 private bool _lastRotateTowardsObjectState = false; private void Update() { if (startRotating && rotateTowards) { // 仅在标识位首次变为true时触发一次Walk动画 if (rotateTowardsObject && !_lastRotateTowardsObjectState) { anim.SetTrigger("Walk"); } _lastRotateTowardsObjectState = rotateTowardsObject; // 旋转逻辑保持不变 if (rotateTowardsObject) { Vector3 targetDirection = objectToRotatetowards.position - transform.position; float singleStep = rotationSpeed * Time.deltaTime; Vector3 newDirection = Vector3.RotateTowards(transform.forward, targetDirection, singleStep, 0.0f); transform.rotation = Quaternion.LookRotation(newDirection); } } }
Animator配置调整
打开Animator窗口,选中当前状态指向Walk状态的过渡连线,修改以下配置:
- 取消勾选
Has Exit Time,移除必须等当前动画播放到指定节点才能过渡的限制 - 将
Transition Duration(s)调整为0.1~0.2秒的合理值,避免两个动画硬切产生突兀感 - 确认过渡条件列表中已正确绑定Walk Trigger参数,无其他多余条件限制
内容的提问来源于stack exchange,提问作者Daniel Lip
相关产品推荐
相关产品推荐

