Unity起動の直後に,ユーザのアクションなしでプロジェクトのエディタスクリプト コードを実行することが役立つことがしばしばあります。これは InitializeOnLoad 属性を static constructor (スタティック コンストラクタ)のあるクラスに適用することで実現できます。スタティック コンストラクタはクラスと同じ名前の関数で静的に宣言された関数であり,戻り値や引数がありません(詳細は ここ を確認下さい):-
using UnityEngine;
using UnityEditor;
[InitializeOnLoad]
public class Startup {
static Startup()
{
Debug.Log("Up and running");
}
}
スタティック コンストラクタは,どのようなスタティック関数やクラスのインスタンスが使用されるよりも先に呼び出しされることが保証されていますが,InitializeOnLoad 属性によりエディタ起動時に呼び出しされることを保証します。
このテクニックが使用される例は,エディタで通常のコールバックをセットアップするとき(いわば“フレーム アップデート”)です。EditorApplicationクラスにはupdate というデリゲートがあり,これはエディタが実行されている間,1秒間に何度もコールされます。プロジェクト起動時にこのデリゲートを有効化するには,次のようなコードを使用します:-
using UnityEditor;
using UnityEngine;
[InitializeOnLoad]
class MyClass
{
static MyClass ()
{
EditorApplication.update += Update;
}
static void Update ()
{
Debug.Log("Updating");
}
}