Files
2025TapTapGameJam/Assets/Script/Core/ScenesManager.cs

84 lines
2.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using UnityEngine;
using UnityEngine.SceneManagement;
using System.Collections;
namespace Core
{
public class ScenesManager : MonoSingleton<ScenesManager>
{
public static ScenesManager Instance { get; private set; }
private string currentGameplayScene;
private bool IsLoadGameplayUI = false;
void Awake()
{
if (Instance != null)
{
Destroy(gameObject);
return;
}
Instance = this;
//DontDestroyOnLoad(gameObject);
}
public void LoadMainMenu()
{
if (IsLoadGameplayUI)
{
// 如果已经加载过游戏内UI场景则卸载掉
StartCoroutine(UnloadScene("UIScene"));
IsLoadGameplayUI = false;
}
// 加载主菜单场景需要卸载掉除了Core以外的所有场景
StartCoroutine(SwitchGameplay("StartMenu"));
}
public void LoadGameplay(string sceneName)
{
StartCoroutine(SwitchGameplay(sceneName));
if (!IsLoadGameplayUI)
{
// 只加载一次游戏内UI场景
StartCoroutine(LoadSceneAdditive("UIScene"));
IsLoadGameplayUI = true;
}
}
/// <summary>
/// 切换游戏场景,卸载当前的游戏场景,加载新的游戏场景
/// 适用于在游戏内切换场景
/// </summary>
/// <param name="newScene"></param>
/// <returns></returns>
private IEnumerator SwitchGameplay(string newScene)
{
if (!string.IsNullOrEmpty(currentGameplayScene))
{
yield return UnloadScene(currentGameplayScene);
}
yield return LoadSceneAdditive(newScene);
currentGameplayScene = newScene;
}
private IEnumerator LoadSceneAdditive(string sceneName)
{
var async = UnityEngine.SceneManagement.SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
while (!async.isDone)
{
yield return null;
}
}
private IEnumerator UnloadScene(string sceneName)
{
var async = UnityEngine.SceneManagement.SceneManager.UnloadSceneAsync(sceneName);
while (!async.isDone)
{
yield return null;
}
}
}
}