1. 程式人生 > 實用技巧 >場景同步非同步載入

場景同步非同步載入

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(); } } }