【Unity】Editor起動時のみ処理を実行する

DEVELOP, Unity

InitializeOnLoad属性を付与することで、UnityEditor起動直後や、スクリプトコンパイル直後にクラスの静的コンストラクタを呼び出すことが出来ます。

InitializeOnLoadを使用

using UnityEngine;
using UnityEditor;
[InitializeOnLoad]
public class Startup
{
    static Startup()
    {
        Debug.Log("Boot Unity Editor!!!");
    }
}

[InitializeOnLoad]属性を付与した全てのクラスの静的コンストラクタが呼び出されます。ゲーム固有の環境セットアップなどの処理を挟み込むには大変便利です。しかし、このままだとEditor起動時のみに処理を絞り込むこと難しいです。

timeSinceStartupを組み合わせる

EditorApplication.timeSinceStartupはEditorが起動してからの時間が入っています。従って組み合わせることで

using UnityEngine;
using UnityEditor;
[InitializeOnLoad]
public class Startup
{
    static Startup()
    {
        //起動して3秒以内
        if (3 < EditorApplication.timeSinceStartup)
        {
            return;
        }
        Debug.Log("Boot Unity Editor!!!");
    }
}

例では、起動してから3秒以内であればEditor起動直後とすることで実現できます。

Posted by kazupon