【Unity】プレイモード(再生時)に前処理を実行する

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;
        }
    }
}

短いですが、説明は以上となります。

コメント

タイトルとURLをコピーしました