Unity3D跟随Brackeys教程开发时游戏结束界面动画触发后异常循环
Unity结束动画短片段循环问题解决方案
该问题和你贴出的两段脚本语法无关,核心是动画被重复触发、或是Animator状态机配置错漏,按优先级从高到低排查修复即可:
- 给触发逻辑加单次拦截
现有EndTrigger脚本没有做重复触发防护:如果玩家对象上挂载了多个碰撞体(比如主体碰撞体、脚底检测碰撞体、攻击判定碰撞体),或是玩家进入触发区后没有被立即移走/禁用,会反复调用CompleteLevel()重复触发动画,表现为只循环开头0.5秒左右的片段。
直接修改EndTrigger脚本加锁:using UnityEngine; public class EndTrigger : MonoBehaviour { public GameManager gameManager; private bool _triggered = false; void OnTriggerEnter (Collider other) { if (!_triggered && other.CompareTag("Player")) { _triggered = true; gameManager.CompleteLevel(); // 触发后直接关闭碰撞体,彻底杜绝重复调用 GetComponent<Collider>().enabled = false; } } } - 修正Animator状态机配置
你提到已经关闭Loop Time、设置了无退出时间过渡,重点补查这几个容易遗漏的配置项:- 选中游戏结束动画片段,确认
Loop Time、Loop Pose两个选项全部取消勾选,仅关闭Loop Time时部分Unity版本仍会出现片段内循环的问题 - 选中结束动画到空状态的过渡连线,确认
Can Transition To Self选项为关闭状态——该选项开启时动画会满足条件就跳回自身开头,是短片段循环的高发原因 - 过渡配置里的
Transition Duration要设为0,避免过渡过程中动画反复回跳
- 选中游戏结束动画片段,确认
- 排查错录的动画关键帧
如果结束动画是你自行录制的UI动效,打开动画编辑时间轴检查0.5秒位置是否存在误录的关键帧:录制动画时如果误操作在0.5秒内打了属性关键帧、后续没有补帧,动画播到0.5秒位置就会回到初始状态,视觉上和循环完全一致,删掉错录的冗余关键帧、拉长动画到目标时长即可修复。
内容的提问来源于stack exchange,提问作者talha
相关产品推荐
相关产品推荐

