2017-07-04 6 views
0

Unityエディタのために私自身の自動保存スクリプトを書いています。エディタを起動したときにセットアップメソッドを実行します。私はInitializeOnLoadを使用してみましたが、エディタの起動時だけでなく、Playボタンが押されるたびにスクリプトを初期化して、すべてのタイマーをリセットするときにも静的コンストラクタを呼び出します。ユニティエディタの起動時にのみスクリプトを実行するには?

私は、タイマーの値がデフォルト値に設定されていても、InitializeOnLoadがスクリプトの別のインスタンスを作成し、すべてがリセットされ、その状態が役に立たない場合にのみスクリプトを初期化する条件を設定しようとしました。

私は起動時にエディタの環境設定でboolを作成して、Playを押すとスクリプトが以前に起動されたかどうかを確認しました。しかし、私はエディタが閉じられたときにこの値をリセットする方法を見つけることができないので、エディタを再び起動すると、boolはまだtrueであり、自動保存は開始しません。

また、ExecuteInEditModeを使ってOnDestroyメソッドを呼び出し、エディタのprefをfalseに設定しようとしましたが、シーンのGameObjectにアタッチされているスクリプトのインスタンスがある場合にのみ動作しますエディタスクリプト。

解決方法はありますか? ありがとうございます。

答えて

3

はあなたの静的コンストラクタ内で、これを使用します。

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

あなたが本当に別のスレッドからユニティのAPIを呼び出すことはできませんので、あなたはこれを行うことはできません。 'static'コンストラクタが別のスレッドから呼び出されているので、エディタから' XXXはMonoBehaviourコンストラクタから例外を呼び出すことはできません。 ' – Programmer

+0

私は '' ClassName() 'コンストラクタを呼び出す' [InitializeOnLoad] '属性を持つ純粋なクラスの単純なスクリプトを使用していると思います。その場合、コンストラクタ内部から 'EditorApplication'プロパティを呼び出すことができます。スクリプトofcはゲームオブジェクトには付属していません。クラスは何も継承しません。 – Galandil

+0

ちょうどそれはエディタスクリプトであり、関連するスレッドは1つしかないので、これは私の問題を完全に解決します。ありがとう@ガランディル。 – ximera

関連する問題