Unity异步加载场景

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

/// <summary>
/// 【Function:加载】【 TIme:2022 05 18】【08实现场景的异步加载:添加】
/// </summary>
public class Loading : MonoBehaviour
{
    /// <summary>场景的名字【08实现场景的异步加载:添加】</summary>
    private string sceneName;

    /// <summary>Text 进度条文本【08实现场景的异步加载:添加】</summary>
    private Text text_progress;

    /// <summary>异步协程 加载场景【08实现场景的异步加载:添加】</summary>
    private AsyncOperation ao;

    /// <summary>是否再加载场景【08实现场景的异步加载:添加】</summary>
    private bool isLoad=false;

    private void Awake()
    {
        sceneName = "2.Game";

        text_progress = GetComponent<Text>();//【08实现场景的异步加载:添加】

        EventCenter.AddListener(EventDefine.StartLoadScene, StartLoad);//添加监听【08实现场景的异步加载:添加】
        gameObject.SetActive(false);//【08实现场景的异步加载:添加】
    }

    private void OnDestroy()
    {
        EventCenter.RemoveListener(EventDefine.StartLoadScene, StartLoad);//移除监听【08实现场景的异步加载:添加】
    }

    /// <summary>
    /// 【Function:开始加载】【 TIme:2022 05 18】【08实现场景的异步加载:添加】
    /// </summary>
    void StartLoad()
    {
        gameObject.SetActive(true);//【08实现场景的异步加载:添加】
        StartCoroutine("Load");//【08实现场景的异步加载:添加】
    }

    /// <summary>
    /// 【Function:协程 加载场景】【 TIme:2022 05 18】【08实现场景的异步加载:添加】
    /// </summary>
    /// <returns></returns>
    IEnumerator Load()
    {
        int displayProgress = -1;//【08实现场景的异步加载:添加】
        int toProgress = 100;//【08实现场景的异步加载:添加】
        while (displayProgress<toProgress)//【08实现场景的异步加载:添加】
        {
            displayProgress++;//【08实现场景的异步加载:添加】
            ShowProgress(displayProgress);//【08实现场景的异步加载:添加】

            if (isLoad==false)
            {
                ao=SceneManager.LoadSceneAsync(sceneName);//【08实现场景的异步加载:添加】
                ao.allowSceneActivation=false;//当场景准备好了, 不让其切换场景,还需要等我们的进度条跑到100%,再加载场景【08实现场景的异步加载:添加】
                isLoad = true;
            }
            yield  return new WaitForEndOfFrame();//等待此针结束【08实现场景的异步加载:添加】
        }

        if (displayProgress>=100)
        {
            ao.allowSceneActivation = true;//进度条好了,异步加载场景才可以成功【08实现场景的异步加载:添加】
            StopCoroutine("Load");//【08实现场景的异步加载:添加】
        }

    }

    /// <summary>
    /// 【Function:显示进度条】【 TIme:2022 05 18】【08实现场景的异步加载:添加】
    /// </summary>
    /// <param name="progress"></param>
    private void ShowProgress(int progress)
    {
        text_progress.text = progress.ToString()+"%";//【08实现场景的异步加载:添加】
    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值