You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 12:24:01