Unity 自作シーン遷移クラス
こんにちは。ネノワヲンです。 今回は、私が使っている自作シーン管理クラスを晒していこうと思います。
コード
using UnityEngine; using UnityEngine.SceneManagement; public class SceneController { /// <summary> /// 指定したシーンに飛ぶ /// </summary> /// <param name="sceneName"></param> public static void JumpScene(string sceneName) { SceneManager.LoadScene(sceneName); } /// <summary> /// 指定したシーンに飛ぶ /// </summary> /// <param name="sceneIndex"></param> public static void JumpScene(int sceneIndex) { SceneManager.LoadScene(sceneIndex); } /// <summary> /// 指定したシーンを追加で生成 /// </summary> /// <param name="sceneName"></param> public static void AddScene(string sceneName) { if (IsSceneLoaded(sceneName)) { return; } SceneManager.LoadScene(sceneName, LoadSceneMode.Additive); } /// <summary> /// 指定したシーンに飛ぶ(非同期) /// </summary> /// <param name="sceneName"></param> public static AsyncOperation JumpSceneAsync(string sceneName) { return SceneManager.LoadSceneAsync(sceneName); } /// <summary> /// 指定したシーンを追加で生成(非同期) /// </summary> /// <param name="sceneName"></param> public static AsyncOperation AddSceneAsync(string sceneName) { if (IsSceneLoaded(sceneName)) { return null; } return SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive); } /// <summary> /// 現在のシーンを読み直す(リトライ) /// </summary> public static void ReloadSceneAsync() { JumpScene(SceneManager.GetActiveScene().buildIndex); } /// <summary> /// そのシーンが読み込み済みかどうか調べる /// </summary> /// <param name="sceneName"></param> /// <returns></returns> public static bool IsSceneLoaded(string sceneName) { // 現在読み込まれているシーン数だけループ for (int i = 0; i < SceneManager.sceneCount; i++) { // 読み込み済みかどうか調べる if (SceneManager.GetSceneAt(i).name.Equals(sceneName)) { Debug.LogWarning($"シーン名:{sceneName}は既に読み込まれています"); return true; } } return false; } }
機能
通常のシーン遷移、シーン追加があります。
また、非同期版ではこのように↓
// サブシーンを読み込む foreach (var sceneName in subSceneNames) { await SceneController.AddSceneAsync(sceneName); } // ステージを読み込む await SceneController.AddSceneAsync(StageSceneName); // ステージのマップを読み込む await SceneController.AddSceneAsync(StageMapSceneName);
awaitでシーン読み込みを待機できます。