還在用難用的AssetBundle?快來運用Unity新的可尋址資源系統(tǒng),助力游戲開發(fā)

Unity Addressables可尋址資源系統(tǒng)是一個強大的Unity資源包,它能夠幫助解決游戲開發(fā)中最重要的一些挑戰(zhàn):高效率和輕松的內(nèi)容管理闰歪。


在管理游戲資源時,往往很難維持好的標(biāo)準(zhǔn)蓖墅,從而避免讓項目變得雜亂無章库倘。最主要的問題在于不同職責(zé)的資源管理系統(tǒng)之間的耦合。而且论矾,項目中資源的存儲教翩,加載和載入后資源的使用方法都有緊密的聯(lián)系。

例如:我們可能要在Resources文件夾存儲某個精靈贪壳。這會讓Unity在構(gòu)建版本時饱亿,把精靈存到特定的存檔文件中。由于精靈存在了這樣的位置闰靴,我們必須通過Resources API來加載該精靈彪笼。


項目變得混亂的速度比你想象的更快,一種方法的選擇將造成項目長期的結(jié)果蚂且。一個好的系統(tǒng)會避免我們輕易犯下草率的錯誤配猫,一個優(yōu)秀的系統(tǒng)也會易于學(xué)習(xí)和使用。


通過使用Unity Addressables可尋址資源系統(tǒng)膘掰,我們可以將資源管理問題分離章姓。我們的目標(biāo)是保持靈活性,同時讓項目具有可維護性识埋。


本文凡伊,我們將介紹開發(fā)者使用Unity Addressables可尋址資源系統(tǒng)創(chuàng)作游戲時,會獲得的三個好處窒舟。


好處1:減少游戲的內(nèi)存壓力

在發(fā)布游戲時系忙,大多數(shù)平臺都會讓開發(fā)者提供玩游戲所需的最低硬件配置要求,以便玩家在購買時參考惠豺。


原因很簡單:要求的硬件配置越高银还,購買游戲的玩家會越少。而從另一個角度看洁墙,實現(xiàn)的內(nèi)存管理越好蛹疯,我們便可在游戲提供更多內(nèi)容和樂趣。


Unity Addressables可尋址資源系統(tǒng)的第一個好處便是:高效的內(nèi)存管理热监。


為了大致了解其效果捺弦,我們可以把這些代碼:

public?class?CharacterCustomization : MonoBehaviour

{

????[SerializeField]?private?List<Material> _armorVariations;

????[SerializeField]?private?MeshRenderer _armorRenderer;

????public?void?ChangeArmorVariation(int?variationId)? ? {

????????_armorRenderer.material = _armorVariations[variationId];

? ? }


}

轉(zhuǎn)化為下面的代碼:

using?UnityEngine.AddressableAssets;

public?class?CharacterCustomizationV2 : MonoBehaviour

{

????[SerializeField]?private?List<AssetReference> _armorVariations;

????[SerializeField]?private?MeshRenderer _armorRenderer;

? ? public?IEnumerator ChangeArmorVariation(int?variationId)

????{

????????var?loadProcess = _armorVariations[variationId].LoadAssetAsync();

? ? ? ? yield?return?loadProcess;

? ? ? ? _armorRenderer.material = loadProcess.Result;

? ? }

}

轉(zhuǎn)化后實現(xiàn)的效果如下圖所示,我們可以輕松節(jié)省內(nèi)存使用。

了解使用可尋址資源系統(tǒng)實現(xiàn)更好內(nèi)存管理的內(nèi)容列吼,請閱讀:《使用Unity Addressables可尋址資源系統(tǒng)》幽崩。


好處2:輕松快捷地加入DLC內(nèi)容

使用Unity Addressables的第二個好處:可以讓開發(fā)者完全控制存儲和加載游戲資源,從而有助于開發(fā)者添加和出售可下載內(nèi)容(DLC)寞钥。


即使目前不考慮發(fā)布DLC內(nèi)容慌申,只要在項目中使用Addressables系統(tǒng),我們就已經(jīng)提前為這項工作做好了準(zhǔn)備理郑。


我們也有其它方法來出售DLC內(nèi)容蹄溉,例如:使用Asset Bundles,但這些方法在實現(xiàn)相同作用的同時香浩,會帶來更高的開銷类缤,因此這些方法會逐漸被棄用。維護正常運行的Asset Bundle管線非常消耗時間和精力邻吭,需要大量復(fù)雜的專業(yè)知識。


在Unity中有很多方法可以實現(xiàn)DLC內(nèi)容宴霸,但對于初學(xué)者來說囱晴,下面代碼是很好的學(xué)習(xí)起點:

public?class?DlcManager : MonoBehaviour

{

????// ...

????public?IEnumerator TryDownloadDlc()

????{

????????if?(_hasBoughtDlc && _dlcDownloaded ==?false)

????????{

????????????var?operationHandle = Addressables.DownloadDependenciesAsync("DLC-Content");

????????????while?(operationHandle.IsDone ==?false)

????????????{

????????????????_progressText.text = $"{operationHandle.PercentComplete * 100.0f} %";

????????????????yield?return?null;

????????????}

????????}

????}

}

通過以上代碼,你應(yīng)該了解其中的原理瓢谢。我們能夠使用Unity Addressables畸写,通過少量成本為玩家?guī)砀鄻啡ぃ螛范粸椋?/p>


好處3:減少迭代時間

使用Unity?Addressables會減少在多個過程的等待時間氓扛。


我們都體驗過按下Unity的Play按鈕后枯芬,等待約半分鐘的時間。如果把構(gòu)建版本部署到移動平臺或WebGL平臺采郎,那么情況還會更糟千所。這種等待時間會大幅增加迭代所花的時間。


任何玩家都不喜歡等待蒜埋,Addressables系統(tǒng)會提供以下幫助:


減少構(gòu)建大小

游戲往往有很多內(nèi)容淫痰,玩家喜歡體驗內(nèi)容,而開發(fā)者喜歡創(chuàng)作內(nèi)容整份,并將把游戲內(nèi)容提供給玩家待错。但這并不意味著,我們創(chuàng)作的每個資源都要包含在玩家安裝的構(gòu)建版本中烈评。實際上火俄,我們要盡可能移除不必要的內(nèi)容。


玩家都希望盡快開始玩游戲讲冠。如果游戲需要2GB的數(shù)據(jù)流量瓜客,以及半小時的下載時間,玩家會對此感到不滿。這樣忆家,玩家可能會更傾向于下載《Candy Crush》這類大小低于50MB的游戲犹菇。


其中一種應(yīng)對策略是:只在安裝程序包含主菜單等運行游戲所需的資源,然后在后臺下載剩余游戲內(nèi)容芽卿,首先要下載的是游戲的關(guān)卡內(nèi)容揭芍。


這也會使開發(fā)期間的部署速度變得更快。我們將能夠每天迭代更多次數(shù)卸例,這個好處會在長期時間中累積效果称杨。


減少加載時間

作為游戲開發(fā)者和玩家,我們都討厭等待筷转。等待會讓我們失去玩游戲的狀態(tài)姑原,我們的游戲時間可能在不經(jīng)意間就結(jié)束了。


Unity正在努力通過改善編輯器和游戲的發(fā)布方式呜舒,減少玩家開始玩游戲的時間锭汛。未來有很多值得期待的功能,例如:Unity 2019.3中避免域重載(domain reloads)的功能很值得期待袭蝗,但如今它仍處于Beta版唤殴。


假設(shè)我們正在開發(fā)中世紀(jì)題材的游戲。數(shù)月前到腥,我們?yōu)橛螒驅(qū)崿F(xiàn)了護甲類型朵逝。開發(fā)過程非常順利,我們生成了超過100MB的游戲內(nèi)容乡范。


接下來配名,我們繼續(xù)開發(fā)其它內(nèi)容,例如:刀劍對決晋辆。我們發(fā)現(xiàn)渠脉,每次按下Play按鈕測試功能時,都會從已開發(fā)功能中加載大量數(shù)據(jù)栈拖,而且加載這些數(shù)據(jù)也需要大量時間连舍。


按下Play按鈕測試“刀劍對決”的動畫時,由于要加載之前實現(xiàn)的護甲功能涩哟,我們會額外等待5秒時間索赏。由于內(nèi)存帶寬有限,因此加載過程耗費的時間大多發(fā)生在I/O過程中贴彼。此外潜腻,CPU也要對該過程進行處理。


作為開發(fā)者器仗,我們會在Unity編輯器中耗費相應(yīng)的時間融涣。而玩家則要在已發(fā)布的游戲中等待更多時間童番。


了解到這個情況帶來的影響后,我們要使用什么方法解決該問題呢威鹿?


Unity Addressables能夠通過兩種方法幫助我們剃斧。

1

減少玩家的加載時間?

我們可以減少玩家的等待時間。使用資源的間接引用而不是直接引用忽你,這樣會大幅改善加載時間幼东。


通過使用間接引用,即AssetReference科雳,Unity不會同時加載所有內(nèi)容根蟹,而只在必要時加載部分內(nèi)容。更重要的是糟秘,我們可以直接控制加載內(nèi)容的時間简逮。


2

減少Unity編輯器上的迭代時間??

你對Unity Addressables窗口中的Play Mode Script有多少了解呢?Play Mode Script會定義Unity編輯器如何加載標(biāo)記Addressable的資源尿赚。


選中Packed Play Mode散庶,Unity會直接加載預(yù)構(gòu)建的可尋址資源,僅使用少量處理開銷吼畏,從而有效減少Unity編輯器中的迭代時間督赤。


使用該功能前,請記得先點擊Build Player Content來構(gòu)建玩家內(nèi)容泻蚊。

我們可以試想一下,把這些方法應(yīng)用到最急需的內(nèi)容時會產(chǎn)生怎樣的效果丑婿。


小結(jié)?

本文性雄,我們了解了Unity Addressables能夠幫助進行更好的創(chuàng)作,并給玩家提供更多內(nèi)容羹奉。?我們將從中受益秒旋,讓項目在未來數(shù)月或來年得到提升。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诀拭,一起剝皮案震驚了整個濱河市迁筛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耕挨,老刑警劉巖细卧,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異筒占,居然都是意外死亡贪庙,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門翰苫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來止邮,“玉大人这橙,你說我怎么就攤上這事〉寂” “怎么了屈扎?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長撩匕。 經(jīng)常有香客問我鹰晨,道長,這世上最難降的妖魔是什么滑沧? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任并村,我火速辦了婚禮,結(jié)果婚禮上滓技,老公的妹妹穿的比我還像新娘哩牍。我一直安慰自己,他們只是感情好令漂,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布膝昆。 她就那樣靜靜地躺著,像睡著了一般叠必。 火紅的嫁衣襯著肌膚如雪荚孵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天纬朝,我揣著相機與錄音收叶,去河邊找鬼。 笑死共苛,一個胖子當(dāng)著我的面吹牛判没,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播隅茎,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼澄峰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辟犀?” 一聲冷哼從身側(cè)響起俏竞,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎堂竟,沒想到半個月后魂毁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡跃捣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年漱牵,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疚漆。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡酣胀,死狀恐怖刁赦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情闻镶,我是刑警寧澤甚脉,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站铆农,受9級特大地震影響牺氨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜墩剖,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一猴凹、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧岭皂,春花似錦郊霎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至土至,卻和暖如春购对,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背陶因。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工骡苞, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人楷扬。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓烙如,卻偏偏與公主長得像,于是被迫代替她去往敵國和親毅否。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • 1.什么是Addressable(可尋址資產(chǎn))系統(tǒng) 可尋址資產(chǎn)系統(tǒng)提供了一種通過“地址”加載資產(chǎn)的簡便方法蝇刀。它通過...
    陌路契約zzz閱讀 49,856評論 6 15
  • 翻譯:莫銘原文地址:AssetBundle usage patterns 本系列中的上一篇文章覆蓋了AssetBu...
    莫銘閱讀 5,227評論 1 12
  • 本文原創(chuàng)版權(quán)歸 博客園吳秦所有螟加,此處純粹技術(shù)收藏,如有再轉(zhuǎn)吞琐,敬請于顯示位置標(biāo)明原創(chuàng)作者及出處捆探,以示尊重!站粟! 作者:...
    Magic_Dong閱讀 4,555評論 0 7
  • 深藏在深山中道觀黍图,古樸且幽靜,紅墻綠瓦的掩映下奴烙,總是神秘不凡
    海寧70閱讀 228評論 0 0