Unityの再生前に前処理を実行したい
このように思う方は結構いるのではないでしょうか?
例えば、
・Addressablsへの登録を再生前に実行したい
・MasterDataのコンバートを再生前に実行したい
・シーン(Scene)データの保存を再生前に実行したい
とか、用途はプロジェクトや環境により色々あると思います。
ここでは、それらに汎用的に使える書き方を解説します。
再生後の後処理の実装も簡単に実装できるので、それらも踏まえて記載します。
実装
以下のEditorフォルダ配下にScriptを作成し、以下のコードをコピペすることで、
プレイモードの状態切り替わり時に処理が実行されるようになります。
今回の主題である再生時に前処理を行いたい場合には、
「PlayModeStateChange.ExitingEditMode」のcase文内に行いたい処理を記載します。
using UnityEditor;
using UnityEngine;
/// <summary>
/// Playモードのライフサイクルにおける前処理および後処理を管理します。
/// </summary>
[InitializeOnLoad]
public static class PlayModeProcessor
{
// 静的コンストラクタでイベントハンドラーを登録
static PlayModeProcessor()
{
EditorApplication.playModeStateChanged += OnPlayModeStateChanged;
}
/// <summary>
/// Playモードの状態変化を検出し、前処理および後処理を実行します。
/// </summary>
/// <param name="state">現在のPlayモードの状態。</param>
private static void OnPlayModeStateChanged(PlayModeStateChange state)
{
switch (state)
{
case PlayModeStateChange.ExitingEditMode:
{
Debug.Log("Playモードに入る前の前処理を実行します。");
}
break;
case PlayModeStateChange.EnteredPlayMode:
{
Debug.Log("Playモードに入った後の後処理を実行します。");
}
break;
case PlayModeStateChange.ExitingPlayMode:
{
Debug.Log("Playモードから退出する前の処理を実行します。");
}
break;
case PlayModeStateChange.EnteredEditMode:
{
Debug.Log("Editモードに戻った後の処理を実行します。");
}
break;
}
}
}
短いですが、説明は以上となります。
コメント