Getting started | Addressables | 1.18.19 (unity3d.com)
1柬采,加載資源
- 使用AssetReference的方式
1,在腳本中聲明AssetReference變量
2卡啰,在Inspector中賦值
注:AssetReference不會自動加載或卸載引用的資產静稻,需要手動調用相關API(LoadAssetAsync
、ReleaseAsset
) - 使用地址的方式(
Addressables.LoadAssetAsync<T>(address)
)
注:加載后同樣需要手動卸載相關資產 - 使用標簽的方式(
Addressables.LoadAssetAsync<T>()
)
注:測試失敗
2匈辱,資源組打包方式
- 將組內資源打包成一個包
- 每項單獨打包
- 按照標簽打包
3振湾,一些概念
Asset address
:標識可尋址資產的字符串ID⊥隽常可以作為鍵來加載資產押搪。
AssetReferences
:可用來與可尋址資產進行綁定纲熏。在代碼中創(chuàng)建該類型的實例后帝美,可在Inspector窗口中為其賦值(可尋址資產類型)亚侠。
Label
:標簽咙轩∶疤眩可以添加到多個資產上荸哟,可以作為鍵來加載/卸載資產嘱能。
Asset location
:用來描述如何加載資產及其依賴項的運行時對象擎浴,可以作為鍵來加載對象滥朱。
Key
:用來表示一個或多個可尋址資源的對象根暑,包含address
、label
徙邻、AssetReferences
實例排嫌、location
對象。
Asset loading and unloading
:在運行時用來加載缰犁、卸載資產的API淳地。
Dependencies
:資產依賴項。
Dependency and resource management
:可尋址系統(tǒng)使用引用計數(shù)來跟蹤正在使用的資產和Assetbundles帅容,包括是否要加載/卸載依賴項颇象。
Group
:可尋址資產的分組〔⑴牵可設置組內資產的打包方式和加載方式夯到。
Content catalogs
:用來描述資產和包含資產的資源的映射關系。
Content builds
:使用可尋址資產時饮亏,在構建項目前耍贾,要先構建內容。
Multiple platform support
:運行平臺路幸。
Addressables tools
:可尋址系統(tǒng)提供的工具荐开。可用來組織简肴、構建晃听、優(yōu)化內容。
- Asset address(資產地址)
1,可尋址系統(tǒng)的一個特性是在運行時可以通過地址加載資產能扒,不管資產是放在本地還是遠端佣渴。系統(tǒng)的資源管理器通過查找catalogs中的地址找到資產存放的位置(資產可以內置、放在本地緩存中初斑、放在遠端)辛润。
2,資產的地址和其物理位置無直接關系见秤,兩者通過Content catalogs
進行映射砂竖。
3,一個資產對應一個地址鹃答,而一個地址可以對應多個資產乎澄。相同地址的資產可以通過標簽進行區(qū)分。 - AssetReference
1测摔,AssetReference
還包含其他類型置济,如AssetReferenceGameObject(AssetReference<GameObject>)
... - Loading and releasing assets
1,加載資源時只需要加載主資產(依賴項會自動加載)锋八。
2浙于,加載的可尋址資產需要手動卸載(否則會占用內存)。
3查库,可尋址系統(tǒng)會對已加載的資產的引用進行追蹤,當引用不為0時黄琼,不會卸載樊销。
4,加載和卸載的方法是對應的脏款,加載使用LoadAssetAsync
時围苫,卸載應使用Release
,加載使用InstantiateAsync
時撤师,卸載應使用ReleaseInstance
剂府。 - Dependency and resource management
1,加載資產時剃盾,系統(tǒng)自動加載其依賴項腺占。卸載時同樣會自動卸載其依賴項(除非依賴項被其他加載的資產引用)。 - Addressables groups and labels
1痒谴,所有可尋址資產隸屬于某個組衰伯,不為其指定時使用默認組。
2积蔚,組規(guī)定了組內資產的打包方式意鲸。 - Group schemas
- Content catalogs
1,Content catalogs
用來表明資產的地址和物理位置的映射關系。
2怎顾,一個Unity項目有一個Content catalogs
读慎,
3,可以加載其他Unity項目創(chuàng)建的Content catalogs
來加載這些項目生成的可尋址資產(即可以創(chuàng)建Unity工程專門用來生成可尋址資產后放到其他項目里用)槐雾。
4夭委,生成Content catalogs
時會同時生成hash文件,在加載遠端的可尋址資產時蚜退,哈希值用來校驗資產是否更新需要下載闰靴。
5,Profile中配置了Content catalogs
中與資產地址對應的加載路徑钻注。 - Content builds
1蚂且,內容生成與項目生成相互獨立。
2幅恋,生成內容時杏死,會生成Content catalogs
文件、hash文件捆交、包含了資產的Assetbundle包淑翼。
3,生成的內容與平臺綁定品追,為不同平臺生成的內容不能相互使用玄括。 - Play mode scripts
定義了在編輯器模式下可尋址系統(tǒng)加載、卸載資產的方式肉瓦。
Use the Asset database:直接使用項目內的可尋址資產
Simulate groups:模擬加載
Use existing build:使用生成的內容 - Support for multiple platforms
4遭京,Assetbundle的壓縮格式
Unity - Manual: AssetBundle compression (unity3d.com)
- 兩種壓縮格式(LZMA、LZ4)
1泞莉,默認情況下哪雕,生成assetbundle包時使用LZMA格式,緩存時使用LZ4格式鲫趁。
2斯嚎,與LZ4格式相比,使用LZMA格式生成的包更小挨厚,但如果要使用包中的某個資源需要將整個包解壓堡僻。LZ4為基于塊的壓縮,使用某個資源時只需要解壓包含資源的塊疫剃。
3苦始,LZMA格式不適用于WebGL平臺。 - Assetbundle包的兩種緩存
1慌申,內存緩存
內存緩存使用無壓縮格式存在于RAM中陌选,可快速訪問理郑,缺點是會占用大量內存。
2咨油,硬盤緩存 - 加載Assetbundle
1您炉,使用UnityWebRequest加載Assetbundle時,在API中傳入版本號參數(shù)Unity會將下載的資源緩存到硬盤上役电,否則會存入內存中赚爵。
2,在API中法瑟,將Caching.compressionEnabled
參數(shù)設為true
冀膝,Unity在將資源存入硬盤時使用LZ4壓縮格式,設為false
則不壓縮霎挟。(不傳入默認為true)
3窝剖,AssetBundle.LoadFromFile
或AssetBundle.LoadFromFileAsync
始終對 LZMA AssetBundle 使用內存緩存,所以最好使用 UWR API酥夭。如果無法使用 UWR API赐纱,您可以使用AssetBundle.RecompressAssetBundleAsync
將 LZMA AssetBundle 重寫到磁盤中。
5熬北,資產組的更新策略
資產組的組更新策略包含兩種:Cannot Change Post Release
疙描,Can Change Post Release
。
-
Cannot Change Post Release
:不經常更新的組(本地組)應該設置為本項策略讶隐。 -
Can Change Post Release
:經常更新的組設置為此項起胰。
注:
1,不管選哪個策略資產組都是可以更新的巫延,區(qū)別在于處理和訪問資產的方式效五。
2,不是完整生成時烈评,不要改資產組的更新策略火俄。
3犯建,設置為Cannot Change Post Release
的資產組讲冠,當組中的某個資產需要更新時,Check for Content Updates
工具會將該資源移入新的組進行打包用于更新适瓦,(新組的加載方式為遠程加載竿开,更新策略為Can Change Post Release
),換句話說玻熙,設置為Cannot Change Post Release
的資產組中的某個資產需要更新時否彩,系統(tǒng)只會下載需要更新的內容,而不會下載整包嗦随。相對的列荔,設置為Can Change Post Release
的資產組中的某項資產需要更新時敬尺,系統(tǒng)需要下載整包。
結論:需要從本地加載的資產組和需要從遠端加載但比較大的資產組應設置為Cannot Change Post Release
贴浙,需要從遠端加載較小且需要頻繁更新的組設置為Can Change Post Release
砂吞。