検証環境
Unity 2018.2.13f1
やりたい事
- エディタで既にロードしているシーンを追加でロードしないようにする。
- エディタでロードしていないけど、実行に必要なシーンを自動でロードする。
これを同時に行うスクリプトです。
問題点
エディタで追加のシーンをロードするのは簡単ですが、開き忘れた場合はエラーになるなど、開発時に他のシーンを開くときなど、必要なシーンを追加するのに面倒な場合があります。
必ず開くとエディタで開いているものと重複して開くことになるため、既に開いているかどうかをチェックしてロードします。
使用ケース
今回はゲーム内のシーンと、共通のUIをシーンで分けて二つを分けるつもりで作りました。
別のシーンからロードされるときは、固定で必要なシーンをロードするのですが、開発中はUIは呼び忘れても自動でロードしたいのです。
ロードタイミングなどで問題が出る可能性もありますので、実際にリリースで使用する場合は、同期や待機処理が必要になるかもしれません。
サンプルコード
LoadUIScene.cs
using UnityEngine; using UnityEngine.SceneManagement; public class LoadUIScene : MonoBehaviour { public string loadSceneName; void Awake () { LoadScene(this.loadSceneName); } private void LoadScene(string loadSceneName) { for (int i = 0; i < SceneManager.sceneCount; i++) { Scene scene = SceneManager.GetSceneAt(i); if (scene.name == loadSceneName) { return; } } SceneManager.LoadScene(loadSceneName, LoadSceneMode.Additive); } }