如何仅在 Unity 编辑器启动时 运行 脚本?
How to run a script only on Unity editor startup?
我正在为 Unity 编辑器编写自己的自动保存脚本,我希望它 运行 在编辑器启动时使用其设置方法。我试过使用 InitializeOnLoad,但它不仅在编辑器启动时调用静态构造函数,而且在每次按下播放按钮时调用静态构造函数,再次初始化我的脚本并重置其所有计时器。
我试图设置一个条件来仅在计时器将它们的值设置为默认值时初始化脚本,但显然 InitializeOnLoad 创建了我的脚本的另一个实例,所以一切都被重置并且条件无用。
然后我考虑在启动时在编辑器首选项中创建一个 bool 来检查,当我按下播放时,脚本是否已经启动过。但是当编辑器关闭时我找不到重置这个值的方法,所以当我再次启动编辑器时 bool 仍然为真并且自动保存没有启动。
我还尝试使用 ExecuteInEditMode 调用 OnDestroy 方法并将编辑器首选项设置为 false,但当然它只在场景中有一个脚本实例附加到 GameObject 时有效,而对于编辑器脚本。
有解决办法吗?
提前致谢。
在静态构造函数中使用它:
if (!EditorApplication.isPlayingOrWillChangePlaymode) {
//Do constructor stuff
}
我正在为 Unity 编辑器编写自己的自动保存脚本,我希望它 运行 在编辑器启动时使用其设置方法。我试过使用 InitializeOnLoad,但它不仅在编辑器启动时调用静态构造函数,而且在每次按下播放按钮时调用静态构造函数,再次初始化我的脚本并重置其所有计时器。
我试图设置一个条件来仅在计时器将它们的值设置为默认值时初始化脚本,但显然 InitializeOnLoad 创建了我的脚本的另一个实例,所以一切都被重置并且条件无用。
然后我考虑在启动时在编辑器首选项中创建一个 bool 来检查,当我按下播放时,脚本是否已经启动过。但是当编辑器关闭时我找不到重置这个值的方法,所以当我再次启动编辑器时 bool 仍然为真并且自动保存没有启动。
我还尝试使用 ExecuteInEditMode 调用 OnDestroy 方法并将编辑器首选项设置为 false,但当然它只在场景中有一个脚本实例附加到 GameObject 时有效,而对于编辑器脚本。
有解决办法吗? 提前致谢。
在静态构造函数中使用它:
if (!EditorApplication.isPlayingOrWillChangePlaymode) {
//Do constructor stuff
}