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