2016-11-15 22 views
3

使用Unity 5.4.2。強制Unity將預製件保存到磁盤

我已經創建,當你按下一個按鈕,出口對於一些預製的數據實現了出口的編輯器腳本。它遞歸地查找所有在其自己的目錄下匹配某種類型的預製文件,並加載這些預製文件,以便以自定義的方式導出它們。

我遇到的問題是,在磁盤上的預製件,裝載有

var prefab = AssetDatabase.LoadAssetAtPath<GameObject>(file); 

不會在編輯器匹配當前的狀態。那就是如果你修改了編輯器中的一些預製數據,它實際上並沒有保存到磁盤上。請注意,這不需要將任何對象添加到場景中,我只是將數據直接從連接到預製件的組件中導出。

我已經嘗試將AssetDatabase.SaveAssets();添加到我的導出函數的頂部,該導出函數應該保存所有資產,但是當我編輯一個值並記錄從預製加載的值時,它們不是最新的。有兩種(非程序化的)方法,到目前爲止,導致我的出口商能夠看到修改後的數據,我發現:

  • 如果我退出團結並重新啓動它,組合屋似乎得到保存在該點出口商看到更新的數據。
  • 如果我播放和停止任何場景,然後出口,出口商可以看到更新的數據,但奇怪的(根據git的狀態),他們還沒有被寫入磁盤,所以我懷疑LoadAssetAtPath實際加載時更新一些緩存版本'玩'。

是否有強制Unity將所有內容保存到磁盤的方法,以便我的導出器可以使用最新的值?

+0

注意:我已經解決了我遇到的問題,但原始問題仍然存在,因爲在我的實驗過程中,我已確認'SaveAssets'實際上並沒有執行它在錫上所說的內容並將其寫入磁盤。我還發現'LoadAssetAtPath'沒有做它所說的事情(它實際上會返回資產的編輯器內存版本,如果它已經加載的話)。 – jhabbott

回答

0

下應該做的伎倆

// Your changes go here 

AssetDatabase.Save(); 
AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); // perhaps even ForceSynchronousImport? 

// You loading should go here 

有關ImportAssetOptions看到這個文檔的詳細信息https://docs.unity3d.com/ScriptReference/ImportAssetOptions.html

+0

這沒有奏效。此外,我發現播放場景並停止會導致更新的資產被出口商看到。請參閱編輯。 – jhabbott

0

注:這不回答原來的問題,但識別和周圍的工作,原因可能幫助任何有相同/類似問題的人。出口計算和緩存的連接到預製件組件的屬性時

我的問題是。我的假設LoadAssetAtPath會從磁盤加載新的實例是錯誤的,它會返回編輯器內存中已存在的版本,這意味着緩存值不會像新加載時那樣無效。

我使用的解決方案在編輯器中運行時,使用#ifdef UNITY_EDITOR是從來沒有緩存。