如何在Unity中让异步加载完成的场景等待1秒后再显示
Unity异步加载场景后等待1秒再激活方案
完整修改后代码
using System.Collections; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class LoadingScreenScript : MonoBehaviour { [SerializeField] private Image _progressBar; [SerializeField] private Animator transition; // 补全你用到的过渡动画组件 [SerializeField] private float waitTimeAfterLoad = 1f; // 加载完成后等待的时间,这里默认设为1秒 void Start() { StartCoroutine(LoadAsyncOperation()); // 修正原代码的拼写错误 } IEnumerator LoadAsyncOperation() { AsyncOperation gameLevel = SceneManager.LoadSceneAsync(2); // 核心配置:禁止场景加载完成后自动激活 gameLevel.allowSceneActivation = false; // 加载进度监听 while (gameLevel.progress < 0.9f) { // allowSceneActivation为false时progress最高到0.9,做映射让进度条正常显示到100% _progressBar.fillAmount = gameLevel.progress / 0.9f; yield return new WaitForEndOfFrame(); } // 手动把进度条设为满值,避免用户看到卡在90%的情况 _progressBar.fillAmount = 1f; // 播放过渡动画 transition.SetTrigger("Start"); // 等待设定的1秒时长 yield return new WaitForSeconds(waitTimeAfterLoad); // 等待结束后激活场景完成切换 gameLevel.allowSceneActivation = true; } }
核心改动说明
- 新增
allowSceneActivation = false配置:Unity的AsyncOperation默认加载完成后会立刻切换场景,关闭这个属性后可以自行控制场景激活时机 - 适配进度条显示逻辑:当
allowSceneActivation设为false时,场景加载进度最多到0.9就会停止,这里手动将进度映射到0-1区间,保证进度条显示正常 - 新增加载完成后的等待逻辑:进度到0.9就代表场景资源已经全部加载完毕,此时执行
WaitForSeconds(1)等待1秒,再把allowSceneActivation设为true就会触发场景切换 - 如果需要等过渡动画播完再切场景,直接把
waitTimeAfterLoad的值改成过渡动画的持续时间即可
内容的提问来源于stack exchange,提问作者Savad
相关产品推荐
相关产品推荐

