Unity5.3から実装されたSceneManagerを利用する方法をまとめます
今回はSceneの情報をどのように取得するかをまとめます
その1はこちら
UnityでSceneManagerを使う(基本編) - スマゲ
■SceneManager
SceneManagerには以下の静的変数があります
・sceneCount
現在ロードしているシーンの数を返します。通常のシーン遷移では常に1ですが、シーンを加算ロードするとその分増えます
public void LoadScene(){ Debug.Log(SceneManager.sceneCount); // 1 SceneManager.LoadScene(1, LoadSceneMode.Additive); Debug.Log(SceneManager.sceneCount); // 2 }
・sceneCountInBuildSettings
BuildSettingsに登録しているsceneの数を返します。ゲーム内の操作によって値が変わることはありません
BuildSettingsに2つシーンを登録している場合
public void LoadScene(){ Debug.Log(SceneManager.sceneCountInBuildSettings); // 2 SceneManager.LoadScene(1, LoadSceneMode.Additive); Debug.Log(SceneManager.sceneCountInBuildSettings); // 2 }
これらの変数はいまいち使いドコロがわからないです
静的関数は以下のものがあります
・GetActiveScene
有効になっているシーンを取得
・GetSceneAt
indexからsceneを取得
・GetSceneByName
名前からシーンを取得
・GetSceneByPath
パスからシーンを取得
SceneManager.GetSceneByPath("Assets/Scenes/main.unity");
■Scene
Sceneはその名前の通りシーンの情報を持つクラスです。SceneManagerのGetScene系のメソッドから取得できます
クラス変数
・BuildIndex
BuildSettingsに登録されているindexを返す
・isDirty
シーンが変更されているかどうかをboolで返す
・isLoaded
シーンがロードされているかどうか
・name
シーン名
・path
シーンが保存されているパス
・rootCount
シーンルートにあるオブジェクトの数
クラス関数
・GetRootGameObjects
シーン内のルートにあるオブジェクトを配列で返す
・isValid
シーンが有効かどうか
isLoadedとかGetRootGameObjectsはパフォーマンスを考慮したゲームの設計等に使えそうですね
■まとめ
ただの羅列になってしまいましたが以上です。次回からは具体的な目的がある場合にどのように使えばよいか考えていこうと思います
■参考
SceneManager
docs.unity3d.com
Scene
docs.unity3d.com