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