场景同步异步加载

using System;
using System.Collections;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.SceneManagement;

public class SceneComponent : GameComponent
{
    public UnityAction beginLoad;
    public float LoadProgress { get; private set; }

    public void Awake()
    {
        Initinalize();
    }
    public override void Initinalize()
    {
        base.Initinalize();
    }
    public override void Release()
    {

    }
    public override void Update()
    {

    }
    public void LoadScene(string name)
    {
        SceneManager.LoadScene(name);
        if (beginLoad!=null)
        {
            beginLoad();
        }
    }
    public void LoadSceneAsync(string name, bool showLoadingUI=false, Action onComplete = null)
    {
        StartCoroutine(LoadSceneAsyn(name,showLoadingUI,onComplete));
    }
    private IEnumerator LoadSceneAsyn(string name,bool showLoadingUI=false,Action onComplete=null)
    {
        AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(name);
        asyncOperation.allowSceneActivation = false;
        if (beginLoad!=null)
        {
            beginLoad();
        }
        if (showLoadingUI)
        {
            m_GameManager.GetGameSystem<UISystem>().GetUIView<LoadingView>().Show();
            yield return null;
        }
        LoadProgress = 0;
        while (asyncOperation.progress<0.9f)
        {
            LoadProgress = asyncOperation.progress;
            yield return null;
        }
        yield return new WaitForSeconds(2);
        while (LoadProgress < 1)
        {
            LoadProgress += 0.1f;
            yield return null;
        }
        asyncOperation.allowSceneActivation = true;
        if (showLoadingUI)
        {
            m_GameManager.GetGameSystem<UISystem>().GetUIView<LoadingView>().Hide();
        }
        if (onComplete != null)
        {
            onComplete();
        }
    }
}
原文地址:https://www.cnblogs.com/DazeJiang/p/14269279.html