一小時(shí)極速掌握游戲資源遠(yuǎn)程熱更新
版權(quán)聲明
本文為“優(yōu)夢創(chuàng)客”原創(chuàng)文章,您可以自由轉(zhuǎn)載,但必須加入完整的版權(quán)聲明
更多學(xué)習(xí)資源請(qǐng)加QQ:1517069595獲?。ㄆ髽I(yè)級(jí)性能優(yōu)化/熱更新/Shader特效/服務(wù)器/商業(yè)項(xiàng)目實(shí)戰(zhàn)/每周直播/一對(duì)一指導(dǎo))

今天這篇文章一共分為兩個(gè)部分,第一部分為游戲的遠(yuǎn)程熱更新,第二部分為實(shí)現(xiàn)一個(gè)商業(yè)項(xiàng)目的資源熱更新。


使用Addressable這個(gè)插件有什么好處呢?
大家知道我們?cè)谶^去使用AssestBundle進(jìn)行資源管理的時(shí)候,他的痛點(diǎn)很多。第一個(gè)是這個(gè)資源管理它采用一種叫做地址引用的方式。
第一點(diǎn)好處,解決了資源的重復(fù)引用問題。原來大家如果有過AssestBundle編程經(jīng)驗(yàn),大家就知道原來去用AssestBundle去管理一個(gè)資源。比如說有一個(gè)資源A,他引用了一個(gè)資源B,還引用了一個(gè)資源C的話。這個(gè)時(shí)候我要自己處理資源。在A進(jìn)行加載之前,必須要把B和C給它加載進(jìn)來。而如果我們使用Addressable這樣一個(gè)插件,我們就不需要管理這些復(fù)雜性。他的地址的引用是很簡單的,我只要指定我要加載的資源名A,然后他自動(dòng)去把B和C給它加載進(jìn)來。這個(gè)是我們使用Addressable的第一個(gè)好處.
第二點(diǎn)好處,自動(dòng)資源引用計(jì)數(shù)機(jī)制。比如說我舉個(gè)例子,還有一個(gè)好處就是資源的卸載,過去我們?cè)谑褂肁ssestBundle進(jìn)行資源管理的時(shí)候,資源卸載也是一個(gè)耗時(shí)耗力的過程。因?yàn)樗械馁Y源卸載都需要你自己去負(fù)責(zé)。而現(xiàn)在我們使用AssestBundle,它自動(dòng)在我們資源引用計(jì)數(shù)為零的時(shí)候,就自動(dòng)把資源卸載掉。
第三點(diǎn)好處,完善的工具界面。大家使過過AssestBundle的同學(xué)都知道,我們使用AssestBundle的資源管理界面是需要自己去搭的。比如說我要管理某一個(gè)文件夾里面的資源,打包成一個(gè)資源包。如果我想通過可視化的方式去指定哪個(gè)文件夾打到哪個(gè)資源包。我要么編寫代碼沒有界面,要么必須要找一些第三方的插件,要么必須自己寫一個(gè)類似的編輯器擴(kuò)展。它對(duì)我們開發(fā)者的要求還是比較高的,而使用我們的Addressable,它會(huì)有一個(gè)整合好的資源管理界面。

Addressable他的使用流程包括四個(gè)點(diǎn)。
首先第一步,我們需要?jiǎng)?chuàng)建一個(gè)資源分組。這個(gè)資源分組他就對(duì)應(yīng)了過去你用AsssetBundle打出來的一個(gè)資源包,如果你沒有學(xué)過AssestBundle也沒有關(guān)系。你可以把它理解成一個(gè)資源組,默認(rèn)的它會(huì)打出來一個(gè)資源文件。
第二步,我們通常是會(huì)把我們需要在項(xiàng)目當(dāng)中使用的資源,加入到我們的資源組里面。
第三步,我們通常會(huì)把這些資源進(jìn)行一個(gè)打包。打包以后呢,就會(huì)按照一個(gè)資源組一個(gè)資源包,一個(gè)資源組一個(gè)資源包的方式,那么形成最終我們可以在游戲項(xiàng)目當(dāng)中所使用所更新的這些資源包。
第四步,在我們打包完以后,就要去加載這些資源。unity支持資源的本地打包和本地加載。也就是說直接從你的安裝包里面去加載,他也支持不打到你的安裝包里面,而是從遠(yuǎn)程服務(wù)器來進(jìn)行資源加載。
Addressable的操作實(shí)現(xiàn)




我們的資源打包在Windows64位這個(gè)文件夾下面

里面會(huì)有三個(gè)資源目錄。

第一個(gè)資源目錄叫做local-assest-all大家注意這個(gè)名字,通過這個(gè)名字我們就知道它對(duì)應(yīng)的實(shí)際上就是我們的本地的資源組。然后這個(gè)后綴都是Addressable在打包的時(shí)候它自動(dòng)加的。

第二個(gè)local開頭的,還是本地的文件。這個(gè)是unity在啟動(dòng)程序的時(shí)候,會(huì)把一些默認(rèn)的比如說在渲染這個(gè)小球的時(shí)候,他會(huì)用一個(gè)默認(rèn)的Shader來進(jìn)行渲染,這個(gè)渲染用的Shader也必須打包。如果不打包的話,將來就沒有辦法去使用這些Shader。






如果你使用第一種方式,它直接就是從項(xiàng)目資源里面去加載。

這個(gè)工具可以添加我們的老師QQ:1517069595領(lǐng)取

我們將小球改成黃色,并且把打包路徑中的選項(xiàng)選擇為遠(yuǎn)程,加載遠(yuǎn)程資源,如圖,注意我們?cè)诘谝淮未虬t色小球時(shí),就應(yīng)當(dāng)將他設(shè)置成遠(yuǎn)程。

但是只有當(dāng)我們使用它的時(shí)候才被加載出來,這叫做邊下邊玩的模式。我用到什么資源他才去下載。但是實(shí)際上這種方式并不太符合我們國內(nèi)游戲廠商的一種資源熱更新的方式。所以在我們的系統(tǒng)課程里面,我們會(huì)去教大家如何像國內(nèi)游戲一樣,在啟動(dòng)的時(shí)候先彈一個(gè)公告。如果有資源更新,彈一個(gè)資源更新的請(qǐng)求框,如果你點(diǎn)了確認(rèn)以后一次性的把游戲需要更新的資源更新下來。而不是說我一邊玩,然后我這邊要用到某一個(gè)資源來從服務(wù)器下載。這樣的話會(huì)造成一個(gè)問題。就是如果你一邊下一邊玩,比如說你在戰(zhàn)斗的時(shí)候,他在那兒去下載資源,這個(gè)時(shí)候游戲的體驗(yàn)也很不好,所以說國內(nèi)的游戲很多都不是邊下邊玩。


第一部分,資源卸載

我們知道了這個(gè)Addressable會(huì)根據(jù)配置好的路徑去加載資源。一種是本地路徑,一種是遠(yuǎn)程路徑,我們用InstatiateAsync這個(gè)函數(shù)。那么我們?nèi)绾稳メ尫乓粋€(gè)對(duì)象呢?就是如果你想要去釋放你這個(gè)實(shí)例化的對(duì)象,那么我們只需要用ReleseInstance就可以了。
如果是一些圖片資源,一些動(dòng)畫資源,模型資源,那么我們就不能實(shí)例化,因?yàn)樗皇菆鼍皩?duì)象。那么我們就可以用LoadAssestAsync來去進(jìn)行加載,然后用Release來進(jìn)行釋放。
另外關(guān)于Async也就是異步,在外面的系統(tǒng)課程里面會(huì)詳細(xì)給大家講。這里就給大家簡單講一下。





那么當(dāng)然在ios平臺(tái)上面,你做的事情可能比更新程序集要復(fù)雜一點(diǎn)。在安卓平臺(tái)上,只要去更新我的程序集,然后通過反射加載這個(gè)程序就可以了。但是ios因?yàn)樗拗屏藙?dòng)態(tài)的去載入新的程序集到APP里面來進(jìn)行執(zhí)行,所以的話我們需要有一個(gè)基于lLRuntime的熱更新的方案。
關(guān)于這方面的內(nèi)容呢,大家也可以參考一下我們的系統(tǒng)課程,我們的皇室戰(zhàn)爭S3是全網(wǎng)為數(shù)不多的去詳細(xì)的給大家講解一個(gè)是客戶端,一個(gè)是服務(wù)器雙端熱更的一個(gè)解決方案。


比如說一個(gè)游戲當(dāng)中的一個(gè)游戲單位,這個(gè)游戲單位呢他可能有很多份,比如說游戲當(dāng)中有弓箭手,你可能有很多相同的弓箭手。這個(gè)時(shí)候呢這個(gè)弓箭手資源它就會(huì)被使用很多次。當(dāng)這個(gè)資源不使用了,當(dāng)這個(gè)弓箭手資源在場景里面全部銷毀不使用的時(shí)候。那么我們說它的使用次數(shù)就變成零。Addressable它會(huì)檢測到引用次數(shù)為零,這樣的一些資源,然后做對(duì)應(yīng)的資源釋放,那么它內(nèi)部的資源釋放的原理是什么,引用技術(shù)是如何實(shí)現(xiàn)的。



第一個(gè)是總體流程,
第二個(gè)是如何實(shí)現(xiàn)熱更新。
第三個(gè)我們講了Addressable在商業(yè)項(xiàng)目當(dāng)中的八大特性。這個(gè)商業(yè)項(xiàng)目當(dāng)中必須要掌握的點(diǎn)。那么同時(shí)也是你在筆試面試環(huán)節(jié)必須要掌握的一些關(guān)于資源管理的一些點(diǎn)。你掌握了這些點(diǎn)以后,可以說讓大家在應(yīng)對(duì)筆試面試的時(shí)候不會(huì)這個(gè)遇到一些障礙。
我們還會(huì)在我們的AssetBundle里面去給大家講解傳統(tǒng)的AssetBundle的熱更新的框架,熱更新如何實(shí)現(xiàn)。那么那么關(guān)于進(jìn)一步的學(xué)習(xí)內(nèi)容呢需要更多的時(shí)間。
可以添加我們的老師領(lǐng)取更多公開課。
更多學(xué)習(xí)資源請(qǐng)加QQ:1517069595獲?。?企業(yè)級(jí)性能優(yōu)化/熱更新/Shader特效/服務(wù)器/商業(yè)項(xiàng)目實(shí)戰(zhàn)/每周直播/一對(duì)一指導(dǎo))
完整視頻可以點(diǎn)擊B站鏈接:https://www.bilibili.com/video/BV1KU4y1L72h/