以防有人完全沒用過Unity2018,還是介紹一下怎么安裝Addressables系統吧:
1.從如圖位置打開PackageManager:
2.由於Addressables系統尚未正式發布,在下圖的界面中,請確認勾選了Advanced中的選項 "Show preview packages":
3.選中 "Addressables System" 條目,點擊右上角的"Install"按鈕即可安裝。 我這里原先已經安裝好了,就沒有安裝按鈕了。
4. 由於我國網絡的實際情況,有可能出現刷不出Packages列表的現象。相信閣下作為程序員,有辦法解決這個問題。
5. 安裝完畢后,通過如圖的菜單項打開界面:
6. 該界面長這樣:
7. 先不管Group是個啥玩意。我們將已有的Resources文件夾中的一個prefab拖拽到 "Default Local Group" 條目下,將這個prefab加入到該Group中:
彈出了一個提示,說Addressables系統管理的資源必須從Resources文件夾中移出來。我們點擊 "Yes",資源就被移動到了提示給出的路徑。
8. 這時候可以看到,Default Local Group 中多了一條內容:
9. 可以看到,Asset Address和Path列的值是一樣的。我們選中該選項后點擊右鍵,可以看到如下的操作菜單:
我們點擊 "Simplify Entry Names" 可以讓系統自動將Asset Address簡化成Object的名字,當然你也可以手動rename給它改一個更好區分的名字。
以上內容就是各種基礎操作,到這里已經可以跳過本篇接下來的內容了。下面的內容可以暫時不用看。
需要注意的是,這里的Entry必須歸屬於某一個Group之下;而且不能同時歸屬於多個Group。也就是,它的組織結構是:
一個Entry也未必要是單一的Asset,你可以將一個文件夾作為一個Entry。
Entry的名字就是你以后加載它的地址。需要注意的是,一般來說不要有相同的Entry name,就算它們是在不同的Group中。因為加載的時候,是不提供GroupName的,只需要Entry name就可以了。只要你不去修改這個名字,不論資源本體是在哪里,都可以通過這個地址加載到。這里說的資源本體,可能在StreamingAssets中、在AB包中甚至在遠端服務器上。
10. 當你選中某個Group的時候,你會發現在Project窗口中也選中了一個同名的文件,其各種屬性展示在Inspector面板中:
實際上,在Addressables面板顯示的Group列表,其各種數據都是存儲在Assets/AddressableAssetsData/AssetGroups文件夾中這個同名文件之中的。它的各種設置則是通過添加給它各種GroupSchema來設置。目前Unity官方提供了三種Schema:
ContentUpdateGroupSchema 說老實話,這個東西我不是很理解。它是用於控制資源更新的。具體來說,如果你認為這個Group在出游戲包時就應該存在(也就是不准備將它放到服務器上作為遠程資源來下載)而且你也沒有計划要改它,就將它的 "Static Content" 設置為 true。那么之后如果發現它里面的資源有問題,就需要比較復雜的操作才能更新它,而且更新的時候是會把被更改的資源單獨提拎出來作為一個新Group的。而StaticContent==false的Group, 如果要被更新是會作為一個整體被更新的(這個說法不太嚴謹,可能只有打AB時將整個Group打作一整個AB的時候才是這樣)。官方論壇上具體的討論在這里。
BundledAssetGroupSchema 如果Group應該被打成AssetBundle,則應該添加這個Schema。它里面的設置選項都是控制如何將這個Group打AB包的,這里面你就可以控制該Group之中的內容是需要被打成一整個AB包還是每個Entry分別打成一個包。看起來,如果是需要頻繁更新的資源,顯然應該打成分散的AB包才好。這樣就不會出現更改一個文件而整個Group的內容都需要更新出去了。
PlayerDataGroupSchema 這個東西看起來很奇怪,具體用途我沒搞清楚。它里面只有兩個property,定義如下:
/// <summary> /// If enabled, all assets in resources folders will have addresses generated during the build.
/// 渣翻: 如果設置為true, 所有在Resources文件夾中的資源都會在打包時生成為Addressables資源。 /// </summary> public bool IncludeResourcesFolders {...} /// <summary> /// If enabled, all scenes in the editor build settings will have addresses generated during the build.
/// 渣翻: 如果設置為true, 所有在 Build Settings 窗口中"Scenes In Build"列表里的Scene都會在打包時變成Addressables資源。 /// </summary> public bool IncludeBuildSettingsScenes {...}
看起來它是控制場景和Resources文件夾中那些資源的,我不明白的是為何它們是作為某個Group的Schema存在的。如果有人知道這個東西的用途或者其他任何指教,請留言告知,多謝。