using System; using System.Threading.Tasks; using UnityEngine; using UnityEngine.SceneManagement; namespace WS { ///场景管理 public class SceneComponent : SingleComponent { ///当前场景 public string ThisScene { get { return SceneManager.GetActiveScene().name; } } ///加载场景 ///场景名称 public void LoadScene(string name) { Release(); SceneManager.LoadScene(name); } /// 加载场景 /// 场景名称 /// 加载回调 public void LoadScene(string name, Action oncallback = null) { LoadScene(name, null, ViewShowModeType.Screen, oncallback); } /// 加载场景 /// 场景名称 /// 加载描述 /// 加载回调 public void LoadScene(string name, string describe, Action oncallback = null) { LoadScene(name, describe, ViewShowModeType.Screen, oncallback); } /// 加载场景 /// 场景名称 /// 加载描述 /// 加载回调 public void LoadScene(string name, string describe, ViewShowModeType viewShowMode, Action oncallback = null) { //LoadEffectComponent effectComponent = Game.Scene.GetComponent(); //effectComponent?.PlayLoadEffect(true); Release(); SceneChange change = ComponentFactory.CreateWithParent(this); if (string.IsNullOrEmpty(describe)) { describe = "加载场景中,请稍后..."; } LoadingController controller = FacadeComponent.Instance.CreateController(); controller.OpenView(viewShowMode, change, describe); Action action = delegate { }; action += delegate { controller.CloseView(); //effectComponent?.PlayLoadEffect(false); change.Dispose(); }; if (oncallback != null) { action += oncallback; } change.LoadScene(name, action); } /// 异步加载场景 /// 场景名称 public async Task LoadSceneAsync(string name) { await LoadSceneAsync(name, null); } /// 异步加载场景 /// 场景名称 /// 加载描述 public async Task LoadSceneAsync(string name, string describe) { //LoadEffectComponent effectComponent = Game.Scene.GetComponent(); //effectComponent?.PlayLoadEffect(true); Release(); SceneChange change = ComponentFactory.CreateWithParent(this); if (string.IsNullOrEmpty(describe)) { describe = "加载场景中,请稍后..."; } LoadingController controller = FacadeComponent.Instance.CreateController(); controller.OpenView(ViewShowModeType.Screen, change, describe); Action action = delegate { controller.CloseView(); //effectComponent?.PlayLoadEffect(false); change.Dispose(); }; await change.LoadSceneAsync(name, action); } ///释放无用资源/内存 private void Release() { GC.Collect(); Resources.UnloadUnusedAssets(); } } }