版本:Unity 6 (6000.0)
语言:English
禁用域和场景重载的详细信息
脚本序列化

在编辑器启动时运行项目代码

有时,让您编辑模式项目代码的部分在 Unity 编辑器启动时立即运行,而无需任何用户操作,会很有用。您可以通过将InitializeOnLoad 属性应用于具有静态构造函数的类来实现此目的。静态构造函数是一个与类同名的函数,声明为static,并且没有返回类型或参数。有关更多信息,请参阅 Microsoft C# 文档中的静态构造函数

using UnityEngine;
using UnityEditor;

[InitializeOnLoad]
public class Startup {
    static Startup()
    {
        Debug.Log("Up and running");
    }
}

静态构造函数始终保证在使用任何静态函数或类的实例之前被调用,但InitializeOnLoad 属性确保在编辑器启动时调用它。当项目中的脚本一段代码,允许您创建自己的组件、触发游戏事件、随时间推移修改组件属性并以任何您喜欢的方式响应用户输入。 更多信息
参见术语表
重新编译时,也称为域重载,也会调用具有此属性的静态构造函数。这种情况发生在以下情况下:

  • Unity 首次加载您的项目。
  • 如果在 偏好设置窗口 的“资产管道”部分启用了“自动刷新”,则 Unity 会检测到脚本的修改。
  • 进入播放模式时,如果在您的播放模式配置中启用了域重载。

加载初始化功能的一个示例用法是设置一个常规回调,可以将其视为编辑器应用程序的“帧更新”。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");
    }
}

其他资源

禁用域和场景重载的详细信息
脚本序列化