有时,让您编辑模式项目代码的部分在 Unity 编辑器启动时立即运行,而无需任何用户操作,会很有用。您可以通过将InitializeOnLoad 属性应用于具有静态构造函数的类来实现此目的。静态构造函数是一个与类同名的函数,声明为static
,并且没有返回类型或参数。有关更多信息,请参阅 Microsoft C# 文档中的静态构造函数。
using UnityEngine;
using UnityEditor;
[InitializeOnLoad]
public class Startup {
static Startup()
{
Debug.Log("Up and running");
}
}
静态构造函数始终保证在使用任何静态函数或类的实例之前被调用,但InitializeOnLoad
属性确保在编辑器启动时调用它。当项目中的脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间推移修改组件属性并以任何您喜欢的方式响应用户输入。 更多信息
参见术语表重新编译时,也称为域重载,也会调用具有此属性的静态构造函数。这种情况发生在以下情况下:
加载初始化功能的一个示例用法是设置一个常规回调,可以将其视为编辑器应用程序的“帧更新”。EditorApplication 类有一个名为update 的委托,在编辑器运行期间每秒调用很多次。以下代码示例定义了一个用[InitializeOnLoad]
装饰的小型自定义类,并将一个成员方法分配给EditorApplication.update
委托,以便它运行并在编辑器启动时开始将Updating
打印到控制台。
using UnityEditor;
using UnityEngine;
// InitializeOnLoad ensures this code runs on Editor launch
[InitializeOnLoad]
class MyClass
{
// Define a static constructor in which we assign the custom Update method to the delegate
static MyClass ()
{
EditorApplication.update += Update;
}
// Define a method with the required signature that performs work we want to do on launch
static void Update ()
{
Debug.Log("Updating");
}
}