// シーン読込 private void LoadScene(SceneEnum.ID sceneID, LoadSceneMode sceneMode) { // シーン名の取得 string sceneName = ""; if (!ConvertScene(sceneID, out sceneName)) { return; } // シーン切替 SceneManager.LoadScene(sceneName, sceneMode); }
// シーン削除 public void RemoveScene(SceneEnum.ID sceneID) { // 選択シーンが存在しなければ処理しない if (!_sceneList.Any(scene => scene.SceneID == sceneID)) { return; } // シーン情報が1つしかなければ処理しない if (_sceneList.Count == 1) { return; } // 一時変数作成 Stack <BasicScene> backupList = new Stack <BasicScene>(); // 選択シーン削除 while (_sceneList.Count > 0) { // 退避 BasicScene basicScene = _sceneList.Pop(); // 選択シーンなら if (basicScene.SceneID == sceneID) { // シーン名の取得 string sceneName = ""; if (!ConvertScene(sceneID, out sceneName)) { return; } // シーン削除 SceneManager.UnloadSceneAsync(sceneName); break; } // 確保 backupList.Push(basicScene); } // シーン再構成 while (backupList.Count > 0) { _sceneList.Push(backupList.Pop()); } }
// シーン登録 public void EntryScene(SceneEnum.ID sceneID) { // フェード中は処理しない if (IsFade) { return; } // 重複確認 if (_sceneList.Any(scene => scene.SceneID == sceneID)) { return; } // シーン作成 LoadScene(sceneID, LoadSceneMode.Additive); }
// シーン情報変換 private bool ConvertScene(SceneEnum.ID sceneID, out string sceneName) { // シーン名初期化 sceneName = ""; // シーン情報探索 SceneData.Param sceneData = _sceneData.list.FirstOrDefault(scene => scene.No == (int)sceneID); // 利用できないシーン情報なら失敗 if (sceneData == null) { return(false); } // シーン名取得 sceneName = sceneData.Name; return(true); }