[Unity筆記] Addressable Asset System

本文為 達哥演講 - Addressable Asset System 的重點整理

NaI
6 min readAug 31, 2019

演講內容範例專案

Addressable是一個基於Asset Bundle的高階流程如同當年Resources被Asset Bundle取代,現在輪到Addressable開始成為取代者不建議Addressable和Asset Bundle混用Build script可以自己寫 改變打包流程 (例如自行實作加密)

因為Asset Bundle對於企劃不是非常友善,常常讓資源管理的工作落在程式身上,Addressable是一個更加友善的新系統,期望能把資源管理的工作轉移回企劃身上

1. Addressables 以2018.3以上版本可以在package manager中找到

安裝完畢後找 Window / Asset Management / Addressables除了script以外的東西幾乎都可以放入(放入script違反平台熱更新規則)每一個群組 (如下圖中的Default Local Group) 都視為一個資源包資源包底下的物件名(最左邊的字串)可修改 (預設使用路徑作為名稱,可重複)物件的Labels可以設定物件的類別 (一個物件可設定多個Label)
可用拖拉方式將物件標記為Addressable,在script中的物件型態為AssetReference
或是在物件的Inspector中尋找 Addressable的選取方塊

2. AddressableAssetSettings

在Addressables分頁左上點選Profile後點Inspect Profile Settings即可開始設定Profile可以用來切割PBE,正式服,VIP服等等
可以在這設定是否放出Addressables相關的Profiler訊息 (Release時再關閉)
檔案中的Profiles選項下可設定 (local/遠端) 的 (打包/加載) 路徑
local測試時,兩個local的路徑應相同

3. 資源包 ScriptableObject config

主要看Build Path和Load PathLocal代表遊戲輸出後,會把這包資源一起輸出 (增加執行檔大小)
Remote則是遠端抓取

4. Object.Instantiate() vs AssetReference.InstantiateAsync()

Object.Instantiate()        | AssetReference.InstantiateAsync()
----------------------------|----------------------------
只能存取local有的資源 (Prefab) | 可以遠端下載資源
同步進行(完成之前不會進入下一行) | 異步進行

5. AssetReference.LoadAssetAsync<>()

即使不知道現在資源在local還是遠端,都可使用同一個API讀取資源包,為異步進行,完成後會發出Completed事件需用void func(AsyncOperationHandle<> obj)監聽物件的Labels(型態為AssetLabelReference)可做為此函數的第一個參數,將對所有資源包進行搜尋,把符合的物件全部抓出,但無法保證每次的加載順序,可做為從一指定集合中隨機取物的前處理 (既然是隨機取物 讀取順序也不再重要)使用LoadResourceLocationsAsync(label)回傳的IResourceLocation 可以得到實際的加載順序 (呼叫當下不加載,不實例化 單純查詢)

6. Hosting Service 架設測試用更新伺服器

在 Window / Asset Management / Hosting Services有網路的情況下,點Add Service再點Enable Service後可以拿到IP和Port
下圖的Profile Variable名字要先記起來 (PrivateIpAddress)
開啟完成後,更新 AddressableAssetSettings的RemoteLoadPath
預設值可能長得像 http://[PrivateIpAddress_4]:[HostingServicePort]
要把 PrivateIpAddress_4 改成上面Profile Variable所設定的名字,Port不用動
接下來把要從遠端抓的包的Build Path, Load Path改為Remote,重新Build一次就可以開始測試有三種 Play Mode Script 可以選擇
Fast Mode : 將所有資源視為local物件 速度最快
Virtual Mode : 以虛擬伺服器抓取遠端資源 速度慢一些
上面兩種方法都是Editor Only,publish必須使用下面的Packed Mode
Packed Mode : 模擬真實環境,要開hosting service並把資源包build出來才能用

7. 小幅度資源修改

可以不用把整包資源包重抓,只需要讓玩家下載更新包前提是Build出來之前,AddressableAssetSettings 有設為 Static ContentBuild選單裡面改選Prepare For Content Update,會出一個視窗讓你選舊的資源包選完之後會比對差異,之後Build For Content Update即可
Static Content 的部分設定為此項

--

--