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;
        }
    }
}
短いですが、説明は以上となります。
  
  
  
  

コメント