こんにちはー!!
Unity 5.3 から、Multi Scene Editing が追加されましたね。
そこで、シーンを読み込んでから、GameObject.Find
をする、
次のようなコードを動かしたのですが、うまくいきません。
TestGameObject は、追加するシーン Scene2 に入っているものとします。
void LoadScene2() { SceneManager.LoadScene("Scene2", LoadSceneMode.Additive); Debug.Log(GameObject.Find("TestGameObject")); }
実行してみると、Null が返ってきます。
なぜ?
これは、Scene2 が読み込まれるまで待たないで、
GameObject.Find を呼び出してしまっているからです!
LoadSceneAsync を使おう!
お、LoadSceneAsync
とかいう、それらしい名前のがあるではないか。
そこで、LoadSceneAsync を使おうとしましたが、ハマりました。
C# の、async / await でするものだと間違えていて、
あれ?Unityの C# のバージョンじゃ、async とか使えなくねー・・
(使う方法もあります)
【感動】UnityでC# 6.0 が使えた!!
追記:朗報Unity 2017 からは、デフォルトで C# 6.0 および .NET 4.6 が使用可能なようです!この記事では Unity 5 での場合を紹介しています。こんにちはー!!Unityで...
しかし、LoadSceneAsync の戻り値は、「UnityEngine.AsyncOperation」でした・・。
アシンクオペレーションってなんだっけ?(検索中)
そう、コルーチンを使うんだ。(`・ω・´)ゞ
void LoadScene2() { StartCoroutine("LoadScene2Coroutine"); } IEnumerator LoadScene2Coroutine() { yield return SceneManager.LoadSceneAsync("Scene2", LoadSceneMode.Additive); Debug.Log(GameObject.Find("TestGameObject")); }
これでシーンが読み込まれるまで待機してくれるようになりました。