一、Addressables基礎(chǔ)操作教程
1、下載Addressables插件
點(diǎn)擊菜單Window / Package Manager,打開(kāi)插件包管理界面,搜索addressables
Addressables的打包方式其實(shí)也是AssetBundle格式,只是在此基礎(chǔ)上做了一層封裝,方便進(jìn)行管理(比如打包、加載、依賴等)。而我們知道,沒(méi)有加密的AssetBundle是可以使用AssetStudio等工具輕易進(jìn)行資源逆向的。
安裝成功后,可以看到多出了一個(gè)Window / Asset Management / Addressables菜單,
2、創(chuàng)建Addressables Settings
點(diǎn)擊Groups菜單,點(diǎn)擊Create Addressables Settings按鈕
此時(shí)工程目錄中會(huì)生成一個(gè)AddressableAssetsData文件夾,里面有很多設(shè)置文件
我們看回Addressables Groups窗口,可以看到它默認(rèn)創(chuàng)建了一個(gè)組:Default Local Group (Default)
3、給Group添加資源
創(chuàng)建幾個(gè)預(yù)設(shè)
文件名字可以任意起,注意不要跟Unity默認(rèn)的文件系統(tǒng)文件夾名字相同,比如Resources、StreamingAssets等
選中資源文件,在Inspector窗口中勾選Addressable,它會(huì)自動(dòng)添加到默認(rèn)的Group中,也可以手動(dòng)拖拽進(jìn)去
4、創(chuàng)建新的Group圖中1是默認(rèn)的,一般用作添加打到本地自資源,2用來(lái)打遠(yuǎn)程加載資源
新建看下圖
其實(shí)每個(gè)Group都是一個(gè)配置文件,可以在AddressableAssetsData / AssetGroups目錄中找到對(duì)應(yīng)的文件,如下
繼續(xù)往下,我這里給Packed Assets添加了幾個(gè)預(yù)設(shè)
怎么打包體內(nèi)資源和包體外資源?又怎么加載?往下看。。
5、設(shè)置Build Path與Load Path
在Inspector窗口中,選中Packed Assets,將Build Path改為RemoteBuildPath,將Load Path改為RemoteLoadPath,如下
這樣Packed Assets打出的資源就在包體外,它會(huì)被打到工程目錄的ServerData目錄中
而加載的時(shí)候,會(huì)去遠(yuǎn)程http://[PrivateIpAddress]:[HostingServicePort]這個(gè)地址加載(這里是localhost,我們可以改成別的IP或域名地址)
圖1是打包的路徑,圖中2是加載的路徑
在Inspector窗口中,選中Default Local Group,默認(rèn)的Build Path為L(zhǎng)ocalBuildPath,Load Path為L(zhǎng)ocalLoadPath,如下
這里打出的包就在包體內(nèi),打出的包在Library\com.unity.addressables里面,在Bulid Settings出項(xiàng)目包時(shí),會(huì)自動(dòng)把這個(gè)資源包拷貝到StreamingAssets目錄下。
6、修改RemoteBuildPath和RemoteLoadPath
如果你想修改RemoteBuildPath和RemoteLoadPath,可以在Addressables Groups窗口中點(diǎn)擊Tools/Window/Profiles菜單
此時(shí)會(huì)打開(kāi)Addressables Profiles窗口,我們可以修改修改RemoteBuildPath和RemoteLoadPath
這里RemoteLoadPath修改成遠(yuǎn)程服務(wù)器地址,我這里是用本地addressables自帶的Hosting服務(wù)器,所以填寫的是http://[PrivateIpAddress]:[HostingServicePort],怎么使用自帶的服務(wù)器,往后看
7、打Addressable資源包
在Addressables Groups窗口中,點(diǎn)擊Build / New Build / Default Build Script,就會(huì)開(kāi)始打Addressable資源包了,等它打包完畢即可
上文中我們建了兩個(gè)Group,其中Default Local Group作為包體內(nèi)的資源包,Packed Assets作為包體外的資源包,我們分別看看他們都build到哪去了。
首先看下Default Local Group,上圖就可以看到在工程目錄Library下
接著我們看下Remote Group打出來(lái)的資源包,在工程目錄的ServerData目錄下,這是打包自動(dòng)新建的,這里的資源是需要放到遠(yuǎn)程服務(wù)器加載。
8、加載Addressable資源
我們加載資源的時(shí)候,并不需要知道目標(biāo)資源到底是在哪個(gè)Group中,也不需要知道這個(gè)Group到底是本地資源包還是遠(yuǎn)程資源包,統(tǒng)一通過(guò)資源的Addressable Name來(lái)加載,資源的Addressable Name在哪里看呢?
比如Capsule預(yù)設(shè),在Inspector窗口中,可以看到它的Addressable Name為d,這個(gè)名字是我們自己改的,不然就是顯示默認(rèn)路徑。
開(kāi)始寫代碼,首先引入命名空間
using UnityEngine.AddressableAssets;
然后使用Addressables.LoadAssetAsync方法加載資源,監(jiān)聽(tīng)Completed 回調(diào),在回調(diào)中拿到資源然后進(jìn)行操作,示例:
public Button btn;
public InputField inp;
public RawImage img;
public Button freeResBtn;
public Texture2D tex2D;
private AsyncOperationHandle<Texture2D> handle;
private AsyncOperationHandle<GameObject> handle1;
private GameObject gam;
void Start()
{
btn.onClick.AddListener(() => BtnClick(inp.text));
freeResBtn.onClick.AddListener(() => BtnShif(inp.text));
BtnClick("d");
}
private void BtnClick(string name)
{
//不能用這個(gè)方式加載,用它加載不能完全釋放不能動(dòng)態(tài)新增資源
//Addressables.LoadAssetAsync<GameObject>(name).Completed += (obj) =>
//{
// gam = obj.Result;
// Instantiate(gam);
//};
//用這個(gè)方式加載資源
handle1 = Addressables.LoadAssetAsync<GameObject>(name);
handle1.Completed += OnLoadCompleted1;
}
void OnLoadCompleted1(AsyncOperationHandle<GameObject> obj)
{
if (obj.Status == AsyncOperationStatus.Succeeded)
{
gam = obj.Result;
gam=Instantiate(gam);
}
else
{
Debug.LogError("Failed to load asset: " + obj.OperationException.ToString());
}
}
把腳本掛在場(chǎng)景中,運(yùn)行Unity,可以看到,正常加載了Capsule并實(shí)例化了
9、Addressable資源三個(gè)加載模式
上面是默認(rèn)從Asset Database加載的,Addressables系統(tǒng)為了方便我們?cè)贓ditor環(huán)境下方便測(cè)試,默認(rèn)都是直接從Asset Database加載的,我們可以在Addressables Groups窗口的Play Mode Script中進(jìn)行切換,建議編輯器環(huán)境下使用Use Asset Database (fastest)即可
Use Asset Database (fastest) 直接加載文件而不打包,快速但Profiler獲取的信息較少
Simulate Groups (advanced) 在不打包的情況下模擬AssetBundle的操作
Use Exising Build(requires built groups) 實(shí)際上是從AssetBundle打包和加載
9.1、Use Asset Database (fastest)
在這個(gè)模式下,Addressables系統(tǒng)會(huì)直接從AssetDatabase加載資源,我們 不需要 Build打Addressable資源包,這個(gè)加載速度最快,建議在項(xiàng)目開(kāi)發(fā)階段使用這個(gè)模式,加載速度快
9.2、Simulate Groups (advanced)
這個(gè)模式下,也是不需要 Build打Addressable資源包的,是模擬資源包加載
9.3、Use Exising Build(requires built groups)
這個(gè)模式下,需要先執(zhí)行Build打出Addressable資源包,它會(huì)根據(jù)Load Path去加載真正的AssetBundle文件并讀取資源。如果不先Build,運(yùn)行時(shí)會(huì)報(bào)錯(cuò)
10、加載遠(yuǎn)程Addressable資源
我們上面的Packed Assets是打成包外資源的,我們想要在Editor環(huán)境下測(cè)試遠(yuǎn)程加載,這個(gè)時(shí)候就需要先搭建一個(gè)Web服務(wù)器了,支持通過(guò)http請(qǐng)求來(lái)獲取資源。Addressable系統(tǒng)已經(jīng)幫我們做了一個(gè)Hosting Services工具,方便我們快速啟動(dòng)一個(gè)Web服務(wù)器。
點(diǎn)擊菜單Window / Asset Management / Addressables / Hosting
接著點(diǎn)擊Create / Local Hosting,創(chuàng)建一個(gè)本地Web服務(wù)器
然后勾選Enable
這樣我們就開(kāi)啟了一個(gè)本地的服務(wù)器了,IP地址是我本機(jī)的局域網(wǎng)IP,我可以通過(guò)localhost進(jìn)行訪問(wèn),注意這里的端口號(hào)是58719。
我們可以看到,它對(duì)我們上文中提到的兩個(gè)文件夾目錄進(jìn)行了Hosting
11、加載遠(yuǎn)程的資源
上面我們已經(jīng)打了build資源包,這里直接改代碼加載遠(yuǎn)程資源Cube,也就是名字c。
void Start()
{
//btn.onClick.AddListener(() => BtnClick(inp.text));
//freeResBtn.onClick.AddListener(() => BtnShif(inp.text));
BtnClick("c");
}
運(yùn)行效果,加載了遠(yuǎn)程資源c
12、看看Addressables是如何知道去哪里加載資源
我現(xiàn)在把資源托管到服務(wù)器上,我把RemoteLoadPath改為服務(wù)器的地址
這個(gè)打開(kāi)方式
13、Group里的設(shè)置項(xiàng)和使用
圖中1,如果要在程序運(yùn)行狀態(tài)下實(shí)時(shí)的更新刷新資源,就要把AssetBundleCRC選擇Disables
圖中2,BundleMode中有三個(gè)選項(xiàng),第一個(gè)是把資源打到一起,第二個(gè)是把資源分開(kāi)打成單個(gè),第三個(gè)是根據(jù)Labels去打包,同一個(gè)Labels打到一起
圖中3,BundleNamingMode是打出資源的名字,默認(rèn)是第二個(gè)是按哈希值出包名,選第一個(gè)Filename是按自定義名字打包
14、打遠(yuǎn)程資源熱更包
想要支持熱更新,需要先開(kāi)啟Catalog,選中AddressableAssetSettings,然后勾選Build Remote Catalog
圖中1,是定義打出的Catalog的自定義名字,不填就是哈希值
圖中2,要遠(yuǎn)程資源熱更需要勾選,選擇自己定義的路徑
實(shí)時(shí)動(dòng)態(tài)熱更和資源釋放看這個(gè)文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-689225.html
好了,后面在加其他的。。。。。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-689225.html
到了這里,關(guān)于【Unity使用addressables制作資源熱更+實(shí)時(shí)動(dòng)態(tài)熱更基本記錄】的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!