Unity切换新场景后Transition动画无法播放问题求助
问题根因
你代码中持有的transition引用属于旧场景的TransitionManager实例,调用LoadSceneAsync加载新场景后,旧场景的所有对象默认会被自动销毁,你最后一行transition.SetTrigger("End")实际上操作的是已经被销毁的旧对象,新场景中挂载的TransitionManager实例没有收到触发信号,因此入场动画无法播放。
可行解决方案
方案1:全局保留唯一TransitionManager实例(最推荐)
不需要在每个场景都放入TransitionManager预制体,仅在初始启动场景放一次,给TransitionManager加单例逻辑+不销毁标记即可,修改逻辑如下:
首先给TransitionManager脚本添加Awake生命周期逻辑:
public static TransitionManager Instance; private Animator transition; private void Awake() { if (Instance == null) { Instance = this; transition = GetComponent<Animator>(); DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } }
原来的协程代码不需要调整,全程使用全局唯一的TransitionManager实例播放切出、入场动画,不会因为场景销毁丢失引用。
方案2:新场景加载完成后主动获取新实例
如果你坚持要在每个场景都放TransitionManager预制体,可以在场景加载完成后重新获取新场景里的实例再触发动画,修改协程代码如下:
IEnumerator PlayTransitionAndLoadSceneCoro(string sceneName) { transition.SetTrigger("Start"); yield return new WaitForSeconds(transitionTime); AsyncOperation asyncSceneLoad = SceneManager.LoadSceneAsync(sceneName); while (!asyncSceneLoad.isDone) yield return null; // 主动获取新场景中的TransitionManager实例 var newSceneTransition = FindObjectOfType<TransitionManager>().GetComponent<Animator>(); newSceneTransition.SetTrigger("End"); }
注意事项
- 检查Animator的Trigger参数是否开启了
Reset On Load,避免参数触发状态异常 - 确保两段动画的状态机过渡设置没有勾选
Has Exit Time,避免触发后等待多余时间无法播放
内容的提问来源于stack exchange,提问作者emredesu
相关产品推荐
相关产品推荐

