うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】UnityEditor の起動時にのみ処理を行う

UnityEditor の起動時にのみ処理を走らせたいと思い、処理を探していると公式の記事が見つかりました

起動時エディタースクリプト実行 - Unity マニュアル

がこちらの記事は「起動時エディタースクリプト実行」とありますが、起動時以外にも
コンパイルが走り終わったタイミングでも呼ばれてしまいます

そのため、公式の処理をベースに ScriptableSingleton を利用して
初回に呼ばれたときのみ処理を行うようにしてみました

探していると EditorApplication.timeSinceStartup を利用している記事もありましたが
UnityProject の規模やPCのスペックによって起動時間は安定しないため、上記を利用するのはおすすめできません

using UnityEngine;
using UnityEditor;

[InitializeOnLoad]
public static class Startup
{
    private class StartUpData : ScriptableSingleton<StartUpData>
    {
        [SerializeField]
        private int _callCount;

        public bool IsStartUp()
        {
            return _callCount++ == 0;
        }
    }
 
    static Startup()
    {
        if (!StartUpData.instance.IsStartUp())
            return;
 
        // UnityEditorの起動時に行いたい処理を記述する
    }
}