本日はUnity枠です。
現在MRDLのSurfacesプロジェクトの解読をしています。
[ShaderTimeUpdater]というクラスの中で見慣れない属性が付けられていたため今回は調べてみます。
〇ExecuteInEditMode
[ExecuteInEditMode]
public class ShaderTimeUpdater : MonoBehaviour
{
...
}
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エディタを実行していないにもかかわらずコンソールウィンドウにログが表示されました。

どうやら[ExecuteInEditMode]は今後廃止されていくようで
[ExecuteAlways]
が新しい属性になるようです。
MRDLのSurfaceのプロジェクトを見ているとこうした古いものが多いため面白いです。