using System; using System.Collections; using UnityEngine; namespace Stary.Evo { public class LoadingData { public LoadingFunc loadingFunc; public bool isCleanupAsset = false; } public delegate IEnumerator LoadingFunc(Action loadingRefresh); /// /// 实际游戏中的loading /// public class Loading : SingletonMono { private LoadingData _loadingData; private Coroutine _cor; public void StartLoading(LoadingFunc loadingFunc, bool isCleanupAsset = false) { StartLoading(new LoadingData { loadingFunc = loadingFunc, isCleanupAsset = isCleanupAsset }); } private void StartLoading(LoadingData loadingData) { //开启UI UIManager.Instance.Open(); if (loadingData.loadingFunc != null) { _loadingData = loadingData; if (_cor != null) { StopCoroutine(_cor); } _cor = StartCoroutine(CorLoading()); } else { Debug.LogError("加载错误,没有参数LoadingData!"); } } private IEnumerator CorLoading() { yield return StartCoroutine(_loadingData.loadingFunc(RefreshLoading)); // if (_loadingData != null && _loadingData.isCleanupAsset) // { // yield return ResourceManager.Instance.GetResourceCore(UIConfig.UIPackageName).CleanupAsync(); // yield return Resources.UnloadUnusedAssets(); // } // Pool.ReleaseAll(); // yield return null; GC.Collect(); yield return null; Exit(); _cor = null; } private void RefreshLoading(float loading, string desc) { // 刷新 var view = UIManager.Instance.GetView(); if (view != null) { view.SetLoading(loading, desc); } if (!string.IsNullOrEmpty(desc)) { Debug.Log(desc); } } private void Exit() { // 关闭UI UIManager.Instance.Close(); ObjectPool.Release(_loadingData); _loadingData = null; } } }