スマゲ

スマートなゲームづくりを目指して日々精進

UnityでSceneManagerを使う(基本編その2)

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