夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

ExecuteInEditModeについて調べてみた

本日はUnity枠です。

現在MRDLのSurfacesプロジェクトの解読をしています。

[ShaderTimeUpdater]というクラスの中で見慣れない属性が付けられていたため今回は調べてみます。

〇ExecuteInEditMode

[ExecuteInEditMode]
public class ShaderTimeUpdater : MonoBehaviour
{
...
}

docs.unity3d.com

ExecuteInEditModeは「EditModeで実行する」という属性です。

この属性を付けたクラスのUpdate関数はUnityのエディタ上で実行されます。

今回は次のようなスクリプトを記述しました。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[ExecuteInEditMode]
public class Test : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        Debug.Log("Editor上で動いた!");
    }
}

これを適当なゲームオブジェクトにアタッチしてコンソールを開きます。

するとUnityエディタを実行していないにもかかわらずコンソールウィンドウにログが表示されました。

f:id:Holomoto-Sumire:20210325191304j:plain

どうやら[ExecuteInEditMode]は今後廃止されていくようで

[ExecuteAlways]

が新しい属性になるようです。

MRDLのSurfaceのプロジェクトを見ているとこうした古いものが多いため面白いです。