MRが楽しい

MRやVRについて学習したことを書き残す

Unityで編集(Editor)モードでもスクリプトのライフサイクル関数を実行する

本日はUnityの小ネタ枠です。
Unityで編集(Editor)モードでもスクリプトのライフサイクル関数を実行する方法についてです。

ExecuteAlways

ExecuteAlways属性をクラスに設定するとスクリプトが編集モードと再生モード時の両方で実行されるようになります。
docs.unity3d.com

スクリプトが現在、編集モードで実行されているか再生モードで実行されているか確認したい場合はApplication.IsPlayingを参照して判別することが可能です。
docs.unity3d.com

サンプルスクリプト

編集モードと再生モードにおけるStart,Updateのライフサイクルで異なるデバッグログを出力するサンプルスクリプトを作成しました。
・ExecuteAlwaysTest.cs

using UnityEngine;

[ExecuteAlways]
public class ExecuteAlwaysTest : MonoBehaviour
{
    void Start()
    {
        if (Application.IsPlaying(gameObject))
        {
            Debug.Log("ExecuteAlwaysTest Start In Playing");
        }
        else
        {
            Debug.Log("ExecuteAlwaysTest Start In Editor");
        }
    }

    void Update()
    {
        if (Application.IsPlaying(gameObject))
        {
            Debug.Log("ExecuteAlwaysTest Update In Playing");
        }
        else
        {
            Debug.Log("ExecuteAlwaysTest Update In Editor");
        }
    }
}

以下の通り、編集モードと再生モードの両方でスクリプトが動作し、デバッグログが出力されます。
なお編集モードにおけるUpdateのタイミングは再生モードと異なり、エディター上で何かしらの操作が行われたタイミングで呼び出されます。