2017-07-04 150 views
0

我正在爲Unity編輯器編寫我自己的自動保存腳本,我希望它在編輯器啓動時運行它的設置方法。我試過使用InitializeOnLoad,但它不僅在編輯器啓動時調用靜態構造函數,而且每次按下播放按鈕時,再次初始化我的腳本並重置其所有定時器。如何僅在Unity編輯器啓動時運行腳本?

我試圖把條件初始化腳本只有當定時器的值設置爲默認值,但顯然InitializeOnLoad創建我的腳本的另一個實例,所以一切都被重置和條件是無用的。

然後我考慮在啓動時編輯器偏好設置中創建一個bool,以便在按下Play時檢查腳本是否已經啓動。但是,當編輯器關閉時,我無法找到重置此值的方法,因此當我再次啓動編輯器時,bool仍然爲true,並且自動保存不啓動。

我也嘗試過使用ExecuteInEditMode來調用OnDestroy方法,並將編輯器的pref設置爲false,但當然它只在腳本的一個實例附加到場景中的GameObject時才起作用,而不是編輯器腳本。

有沒有解決這個問題的方法呢? 在此先感謝。

回答

3

你的靜態構造函數中使用此:

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

你不能這樣做,因爲你不能真正從另一個調用線程統一的API。 'static'構造函數被另一個線程調用,所以我期望'XXX不允許從編輯器的MonoBehaviour構造函數異常中被調用。 – Programmer

+0

我認爲他正在使用一個簡單的腳本,並且使用'[InitializeOnLoad]'屬性來調用靜態ClassName()'構造函數。在這種情況下,他可以從構造函數中調用EditorApplication屬性。 c的腳本沒有附加到任何遊戲對象,該類不會繼承任何東西。 – Galandil

+0

確切地說,它是一個編輯器腳本,只涉及一個線程,所以這完美地解決了我的問題。謝謝@Galandil。 – ximera