UnityのSceneManagerで、シーンが存在するか確認する

TOC

Unity 5.3 から追加された、Multi Scene Editingで、
シーンを追加する時、
同じシーンを何個も追加したくない!ってこと、ありますよね。

「SceneManager.Contains()」的なメソッドがあれば最高なのですが、
アクティブなシーンしか
取れなかったりとかするんですよねー(GetActiveScene 関数)。

そこで、次のようにしました。
しかし、Unity 5.3.1 くらいではOKだったのですが、
5.3.2にしたら非推奨になっちゃってw・・

1
2
3
4
5
6
7
8
9
10
11
using UnityEngine.SceneManagement;
using System.Linq;

void LoadMyScene()
{
// MyScene1 というシーンが存在しなければ
if (SceneManager.GetAllScenes().Count((scene) => scene.name == "MyScene1") == 0)
{
SceneManager.LoadScene("MyScene1", LoadSceneMode.Additive);
}
}

Linqで、すべてのシーンの中から、指定された名前のシーンが 1 以上の場合は存在するとしました。
しかし、すべてのシーンを取得する、「GetAllScenes 関数」が非推奨になってしまいました。
1行で書けるのがよかったのでしたが、しょうがない。for文をつかって地道にやろう。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using UnityEngine.SceneManagement;

void LoadMyScene()
{
if (!ContainsScene("MyScene1"))
{
SceneManager.LoadScene("MyScene1", LoadSceneMode.Additive);
}
}

bool ContainsScene(string sceneName)
{
for (int i = 0; i < SceneManager.sceneCount; i++)
{
if (SceneManager.GetSceneAt(i).name == sceneName)
{
return true;
}
}
return false;
}

「using UnityEngine.SceneManagement」を追加するのを忘れずに。
これでハマったこともあります。

もっといい方法ないんですかねー・・。