YanCheng_Metrology/Assets/Scripts/ProjectBase/ScenesManager/ScenesManager.cs

71 lines
2.2 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.SceneManagement;
public class ScenesManager : BaseManager<ScenesManager>
{
private ScenesManager()
{
}
/// <summary>
/// 同步加载场景
/// </summary>
/// <param name="sceneName">场景名称</param>
/// <param name="action">场景加载后需要做的</param>
public void LoadScene(string sceneName, UnityAction action = null,
LoadSceneMode loadSceneMode = LoadSceneMode.Single)
{
SceneManager.LoadScene(sceneName, loadSceneMode);
action?.Invoke();
}
/// <summary>
/// 异步加载场景
/// </summary>
/// <param name="sceneName">场景名称</param>
/// <param name="action">委托</param>
/// <param name="loadSceneMode">加载场景方式</param>
public void LoadSceneAsyn(string sceneName, UnityAction action = null,
LoadSceneMode loadSceneMode = LoadSceneMode.Single)
{
MonoMgr.Instance.StartCoroutine(ReallyLoadScene(sceneName, action));
}
/// <summary>
/// 协程加载场景
/// </summary>
/// <param name="sceneName">场景名称</param>
/// <param name="action">委托</param>
/// <param name="loadSceneMode">加载场景方式</param>
/// <returns></returns>
private IEnumerator ReallyLoadScene(string sceneName, UnityAction action = null,
LoadSceneMode loadSceneMode = LoadSceneMode.Single)
{
AsyncOperation ao = SceneManager.LoadSceneAsync(sceneName, loadSceneMode);
while (!ao.isDone)
{
yield return null;
}
E_SceneName currentSceneName;
switch (sceneName)
{
case "03_OfficeScene":
currentSceneName = E_SceneName.Office;
break;
case "04_ToolMaterialScene":
currentSceneName = E_SceneName.ToolRoom;
break;
case "05_LiveScene":
currentSceneName = E_SceneName.LiveScene;
break;
default:
currentSceneName = E_SceneName.None;
break;
}
GameManager.ProcessMgr.currentSceneName = currentSceneName;
action?.Invoke();
}
}