Unity中如何中断正在播放的首个动画并启动第二个动画
Unity Animator实现动画强制中断切换的正确设置方法
关键设置步骤
1. 配置过渡的中断规则
选中拳击→踢腿、踢腿→拳击的双向过渡,在Inspector的Settings栏里找到Interrupt Source:
- 设置为
Current State:表示当前播放的动画(比如拳击)可被新触发的过渡(比如踢腿)直接中断 - 确保
Interruptible处于勾选状态(默认勾选,不要手动关闭)
2. 选对变量类型+正确调用
- 使用Trigger的情况:直接在代码中调用
animator.SetTrigger("Kick")即可,Trigger会在过渡完成后自动重置,无需手动清零。注意过渡条件仅绑定该Trigger,不要添加多余条件。 - 使用布尔变量的情况:例如创建
IsPunching和IsKicking两个布尔参数,切换时必须先将当前动画的布尔值设为false,再开启新动画的布尔值:
状态机中的退出条件也要对应设置:拳击状态的退出条件设为// 从拳击切换到踢腿的示例代码 animator.SetBool("IsPunching", false); animator.SetBool("IsKicking", true);IsKicking == true,踢腿状态的退出条件设为IsPunching == true。
3. 必须关闭过渡的「退出时间」
这是最容易忽略的核心点!所有需要强制中断的过渡,一定要取消勾选"Has Exit Time",并将Exit Time设为0。如果保留Exit Time,动画必须播放到指定时间点才允许切换,自然无法实现中断效果。
若需要轻微的平滑过渡,可以调整Transition Duration(比如设为0.1秒),但Exit Time必须关闭。
4. 状态机结构建议
- 先设置一个Idle状态作为默认状态,拳击和踢腿状态均从Idle过渡进入,同时两者之间添加双向过渡
- 动画片段尽量不要开启循环(除非有特殊需求,若为循环动画,需确保退出条件足够明确)
排查小技巧
- 检查参数名是否存在拼写错误,代码中的名称必须与Animator面板中的参数名完全一致
- 确认是否存在多个过渡条件叠加,导致新的触发信号被抵消
- 打开Animator的Debug模式(面板右上角的Debug按钮),实时查看参数变化和状态切换,可快速定位问题
内容的提问来源于stack exchange,提问作者Operator
相关产品推荐
相关产品推荐

