この記事でのバージョン
Unity 5.4.0f3
はじめに
Unityを5.4.0f3アップデートしたところ、以下の通りWarningが出ました。
This message has been deprecated and will be removed in a later version of Unity.
Add a delegate to SceneManager.sceneLoaded instead to get notifications after scene loading has completed
OnLevelWasLoadedが非推奨になったからSceneManager.sceneLoadedを使えとの事。
警告を無視してOnLevelWasLoadedを使うことも可能ですが、
いつか削除されるかもしれないので素直にSceneManager.sceneLoadedを使う方法に変えてみました。
今回はその方法のご紹介。
SceneManager.sceneLoaded
そもそもSceneManager.sceneLoadedとはなんぞやという話ですが、
名前の通り、シーンをロードし終わった時に呼ばれるイベントです。
Add a delegate to this to get notifications when a scene has loaded
イベントやデリゲートについては以下の記事を参照の事。
実際にSceneManager.sceneLoadedを使って、
OnLevelWasLoadedを書き換えた例が以下の通りです。
/*OnLevelWasLoadedを使った場合*/ using UnityEngine; using System.Collections; public class NewBehaviourScript : MonoBehaviour { private void OnLevelWasLoaded (int level){ Debug.Log (level); } }
/*sceneLoadedを使った場合*/ using UnityEngine; using UnityEngine.SceneManagement;//SceneManagerを使う用 using System.Collections; public class NewBehaviourScript : MonoBehaviour { private void Start (){ SceneManager.sceneLoaded += OnSceneLoaded;//イベントにメソッドを登録 } private void OnSceneLoaded (Scene scene, LoadSceneMode sceneMode){ Debug.Log (scene.buildIndex);//sceneの番号はscene.buildIndexで分かる } }
上記の通り、SceneManager.sceneLoadedにメソッドを登録するだけOK。
ただ、注意が必要なのがsceneLoadedが実行されるタイミングです。
実行される順番は
- Awake
- SceneManager.sceneLoaded
- Start
なので、
Startでメソッドを登録すると最初のシーンでは実行されず、
Awakeでメソッドを登録すると最初のシーンでも実行されます。
おわりに
記事の内容と関係ありませんが、
Unity Plusを契約したので、この記事以降の記事はエディターが黒くなります!ヾ( ゚д゚)ノ゛
ねんがんの プロエディターUIスキン をてにいれたぞ! pic.twitter.com/oo8cYNIcCQ
— カン@Game Creator(Unity/VR/Switch/Steam) (@Kan_Kikuchi) 2016年8月7日