C# 如何仅在Unity editor启动时运行脚本?

C# 如何仅在Unity editor启动时运行脚本?,c#,unity3d,unityscript,unity-editor,C#,Unity3d,Unityscript,Unity Editor,我正在为Unity editor编写自己的autosave脚本,希望它在启动编辑器时运行其设置方法。我尝试过使用InitializeOnLoad,但它不仅在编辑器启动时调用静态构造函数,而且在每次按下播放按钮时都调用静态构造函数,再次初始化脚本并重置其所有计时器 我试图设置一个条件,仅当计时器的值设置为默认值时才初始化脚本,但显然InitializeOnLoad会创建我脚本的另一个实例,因此所有内容都会重置,并且该条件无效 然后,我考虑在启动时在编辑器首选项中创建一个bool,以便在按下Play

我正在为Unity editor编写自己的autosave脚本,希望它在启动编辑器时运行其设置方法。我尝试过使用InitializeOnLoad,但它不仅在编辑器启动时调用静态构造函数,而且在每次按下播放按钮时都调用静态构造函数,再次初始化脚本并重置其所有计时器

我试图设置一个条件,仅当计时器的值设置为默认值时才初始化脚本,但显然InitializeOnLoad会创建我脚本的另一个实例,因此所有内容都会重置,并且该条件无效

然后,我考虑在启动时在编辑器首选项中创建一个bool,以便在按下Play键时检查脚本是否已启动。但是,当编辑器关闭时,我找不到重置此值的方法,因此当我再次启动编辑器时,bool仍然为true,并且自动保存不会启动

我还尝试使用ExecuteInEditMode调用OnDestroy方法,并将editor pref设置为false,但当然,它仅在场景中有脚本实例附加到游戏对象时才起作用,而编辑器脚本则不起作用

有解决办法吗?
提前感谢。

在静态构造函数中使用此选项:

if (!EditorApplication.isPlayingOrWillChangePlaymode) {
    //Do constructor stuff
}

在静态构造函数中使用此选项:

if (!EditorApplication.isPlayingOrWillChangePlaymode) {
    //Do constructor stuff
}

您不能这样做,因为您不能从另一个线程调用Unity的API。
静态
构造函数是从另一个线程调用的,因此我希望不允许从编辑器中的单行为构造函数异常调用
XXX。我认为他使用的是一个简单脚本,纯类具有
[InitializeOnLoad]
属性,该属性调用
静态类名()
构造函数。在这种情况下,他可以从构造函数内部调用
EditorApplication
属性。ofc脚本没有附加到任何游戏对象,该类不会继承任何内容。确切地说,作为一个编辑器脚本,只涉及一个线程,因此这完美地解决了我的问题。谢谢@Galandil。哦,我明白了。脚本未附加到任何游戏对象,并且从零继承。这就是OP发布代码的好处所在+1@ximera你能详细说明一下你做了什么来解决你的问题吗?你不能这样做,因为你不能真正从另一个线程调用Unity的API。
静态
构造函数是从另一个线程调用的,因此我希望不允许从编辑器中的单行为构造函数
异常调用
XXX。我认为他使用的是一个简单脚本,纯类具有
[InitializeOnLoad]
属性,该属性调用
静态类名()
构造函数。在这种情况下,他可以从构造函数内部调用
EditorApplication
属性。ofc脚本没有附加到任何游戏对象,该类不会继承任何内容。确切地说,作为一个编辑器脚本,只涉及一个线程,因此这完美地解决了我的问题。谢谢@Galandil。哦,我明白了。脚本未附加到任何游戏对象,并且从零继承。这就是OP发布代码的好处所在+1@ximera你能详细说明一下你做了什么来解决你的问题吗?