Иногда бывает полезно иметь возможность выполнять определенные скрипты редактора при запуске Unity без необходимости выполнения дополнительных действий со стороны пользователя. Это можно реализовать с помощью добавления атрибута InitializeOnLoad к классу, в котором определен статический конструктор. Статический конструктор — это функция, название которой совпадает с названием класса, объявленная как static и не имеющая возвращаемого типа и параметров (более подробно описано здесь и здесь):-
using UnityEngine;
using UnityEditor;
[InitializeOnLoad]
public class Startup {
static Startup()
{
Debug.Log("Up and running");
}
}
Статический конструктор всегда будет вызван раньше любой статической функции и/или использования объекта этого класса, а атрибут InitializeOnLoad указывает на то, что он (статический конструктор) будет вызван при запуске редактора Unity.
Примером использования этого подхода может служить установка обычного колбэка “обновление кадра” в редакторе. В классе EditorApplication определен делегат [update]ScriptRef:EditorApplication-update.html), который вызывается много раз в секунду во время работы редактора. Для того, чтобы получить возможность использовать этот делегат при запуске проекта, можно использовать следующий код:-
using UnityEditor;
using UnityEngine;
[InitializeOnLoad]
class MyClass
{
static MyClass ()
{
EditorApplication.update += Update;
}
static void Update ()
{
Debug.Log("Updating");
}
}