本日はUnityの小ネタ枠です。
Unityでスクリプトから再生開始/停止の状態変化を取得する手順についてです。
スクリプトから再生開始/停止の状態変化を取得する
EditorApplication-playModeStateChangedは再生開始/停止の状態変化を通知します。
この通知を受け取るには事前にイベントハンドラーを追加しておく必要があります。
docs.unity3d.com
docs.unity3d.com
以下のタイミングで通知が行われ、引数からどの状態変化が発生したか取得できます。
状態名 | 説明 |
---|---|
EnteredEditMode | 再生モードから編集モードに切り替わった次のタイミングで発生します |
ExitingEditMode | 編集モードが終了したタイミングで発生します |
EnteredPlayMode | 編集モードから再生モードに切り替わった次のタイミングで発生します |
ExitingPlayMode | 再生モードが終了したタイミングで発生します |
イベントハンドラーは再生開始を行う前に追加する必要があるのでInitializeOnLoadAttributeまたはInitializeOnLoadMethodを利用して登録しておきます。
サンプルスクリプト
以下のplayModeStateChangedの通知を利用して、再生開始時に特定のシーンに切り替えを行うサンプルスクリプトを作成しました。
・PlayModeStateChangedTest.cs
using UnityEditor; public class PlayModeStateChangedTest { // 再コンパイル時に本メソッドが実行される [InitializeOnLoadMethod] static void Initialize() { // プレイモードの状態変化を監視するイベントハンドラーを登録 EditorApplication.playModeStateChanged += OnPlayModeStateChanged; } static void OnPlayModeStateChanged(PlayModeStateChange state) { // プレイモードの開始時にシーンを切り替える if (state == PlayModeStateChange.EnteredPlayMode) { // 再生シーンを読み込む // 対象のシーンはBuild Settingsに登録しておく必要がある UnityEngine.SceneManagement.SceneManager .LoadSceneAsync("Assets/Sandbox/PlayModeStateChangedTest/Scenes/PlayModeStateChangedTest.unity"); } } }
以下の通り、シーンを再生するとその状態変化を検知して再生するシーンが切り替えられました。