Assets, Resources and AssetBundles(三):The Resources folder

版本檢查: 2017.3-難度: 高級

這是第三章的一系列文章涵蓋Assets,Resources和resource management 在 Unity 5。

本章討論了Resources系統。這個系統允許開發人員在一個或多個名爲Resources的文件夾中存儲Assets,並在運行時使用Resource API從這些Assets中加載或卸載對象。

2.1. Best Practices for the Resources System

Don't use it.

提出這一強有力的建議有以下幾個原因:

  1. 使用Resources文件夾使細粒度內存管理更加困難
  2. 不正確地使用Resources文件夾將增加應用程序啓動時間和構建的長度  --隨着Resources文件夾數量的增加,管理這些文件夾中的Assets變得非常困難
  3. Resources系統降低了項目向特定平臺交付自定義內容的能力,並消除了增量內容升級的可能性  --AssetBundle Variants是Unity的主要工具,用於在每個設備的基礎上調整內容。

2.2. Proper uses of the Resources system(正確使用 Resources system)

有兩種特定的用例,其中Resources 系統可以幫助而不妨礙良好的開發實踐:

  1. Resources 文件夾的易用性使它成爲一個快速原型的優秀系統。但是,當項目進入完全生產階段時,應該取消對Resources文件夾的使用。

  2. Resources 文件夾在一些簡單的情況下可能很有用,如果

  • 在項目的整個生命週期中通常需要的

  • 不需要佔用內存

  • 不容易修改,也不因平臺或設備而異

  • 用於最小引導

第二種情況的例子包括用於託管prefabs的MonoBehaviour單例,或者包含第三方配置數據的ScriptableObjects,如facebook應用程序ID。

2.3. Serialization of Resources

在構建項目時,所有名爲“Resources”的文件夾中的Assets和對象都被組合成一個序列化文件。該文件還包含元數據和索引信息,類似於AssetBundle。正如AssetBundle文檔中所描述的,該索引包括一個序列化查找樹,用於將給定對象的名稱解析爲其適當的FileGUID和LocalID。它還用於在序列化文件正文中的特定字節偏移量處定位對象。

在大多數平臺上,查找數據結構是一個平衡的搜索樹,其構造時間以O(n log(N)的速率增長。這種增長還會導致索引的加載時間隨着Resources文件夾中的對象數量的增加而線性增長。

此操作不可跳過,並在應用程序啓動時發生,同時顯示初始的非交互式啓動屏幕。初始化包含10,000個Asset的Resources系統在低端移動設備上花費了多秒時間,即使Resources文件夾中包含的大多數對象實際上很少需要加載到應用程序的第一個場景中。

官方譯文(未完待續)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章