1. 程式人生 > >玩轉Unity資源、物件及序列化(上)(下)

玩轉Unity資源、物件及序列化(上)(下)

如果在Unity編輯器處於關閉狀態時丟失.meta檔案,或資原始檔被移動但沒有移動對應的.meta檔案時,所有對資原始檔中的Object的引用都會丟失

複合資源和匯入器


正如前面第一節[深入理解資源與物件]中所說的一樣,不能被Unity直接支援的資源型別必須經過匯入才可以使用——使用資源匯入器來完成。這些匯入器是自動呼叫的,您也可以使用AssetImporter在指令碼中呼叫API及其子類。例如,在匯入單獨的紋理資源例如PNG和JPG時,TextureImporterAPI提供了匯入時要使用的相關設定的訪問。
匯入過程最終的產物是一系列UnityEngine.Object。在Unity編輯器中,這些物件會具體表現為父資源下的多個子資源,例如作為SpriteAtlas匯入的紋理材質,其下屬會有多個巢狀的Sprite。每一個物件都會使用相同的檔案GUID,因為它們的源資料都儲存在同一個資原始檔中。它們在紋理資源中的具體區分工作則使用本地ID來完成。
匯入過程中會將源資源轉換為匹配Unity編輯器中選定的目標平臺的格式。匯入過程可能會牽涉一些重量級操作,例如紋理壓縮。如果每次開啟Unity編輯器時都要執行這些操作,那效率就太低了。
為了解決這一問題,我們將資源匯入的結果快取在Library資料夾中。具體就是,匯入程序的結果將會儲存在以資原始檔GUID頭兩位作為名稱的資料夾中。這些資料夾位於Library/metadata/目錄下。各個不同的物件會被序列化後儲存在一個二進位制檔案中,檔案使用資原始檔的GUID來命名。
這對所有資源都是一樣的,不僅僅是非原生資源。只不過Unity原生支援的資源不需要對其進行轉換或序列化處理。