一、Addressables基础操作教程
1、下载Addressables插件
点击菜单Window / Package Manager,打开插件包管理界面,搜索addressables
Addressables的打包方式其实也是AssetBundle格式,只是在此基础上做了一层封装,方便进行管理(比如打包、加载、依赖等)。而我们知道,没有加密的AssetBundle是可以使用AssetStudio等工具轻易进行资源逆向的。
安装成功后,可以看到多出了一个Window / Asset Management / Addressables菜单,
2、创建Addressables Settings
点击Groups菜单,点击Create Addressables Settings按钮
此时工程目录中会生成一个AddressableAssetsData文件夹,里面有很多设置文件
我们看回Addressables Groups窗口,可以看到它默认创建了一个组:Default Local Group (Default)
3、给Group添加资源
创建几个预设
文件名字可以任意起,注意不要跟Unity默认的文件系统文件夹名字相同,比如Resources、StreamingAssets等
选中资源文件,在Inspector窗口中勾选Addressable,它会自动添加到默认的Group中,也可以手动拖拽进去
4、创建新的Group
图中1是默认的,一般用作添加打到本地自资源,2用来打远程加载资源
新建看下图
其实每个Group都是一个配置文件,可以在AddressableAssetsData / AssetGroups目录中找到对应的文件,如下
继续往下,我这里给Packed Assets添加了几个预设
怎么打包体内资源和包体外资源?又怎么加载?往下看。。
5、设置Build Path与Load Path
在Inspector窗口中,选中Packed Assets,将Build Path改为RemoteBuildPath,将Load Path改为RemoteLoadPath,如下
这样Packed Assets打出的资源就在包体外,它会被打到工程目录的ServerData目录中
而加载的时候,会去远程http://[PrivateIpAddress]:[HostingServicePort]这个地址加载(这里是localhost,我们可以改成别的IP或域名地址)
图1是打包的路径,图中2是加载的路径
在Inspector窗口中,选中Default Local Group,默认的Build Path为LocalBuildPath,Load Path为LocalLoadPath,如下
这里打出的包就在包体内,打出的包在Library\com.unity.addressables里面,在Bulid Settings出项目包时,会自动把这个资源包拷贝到StreamingAssets目录下。
6、修改RemoteBuildPath和RemoteLoadPath
如果你想修改RemoteBuildPath和RemoteLoadPath,可以在Addressables Groups窗口中点击Tools/Window/Profiles菜单
此时会打开Addressables Profiles窗口,我们可以修改修改RemoteBuildPath和RemoteLoadPath
这里RemoteLoadPath修改成远程服务器地址,我这里是用本地addressables自带的Hosting服务器,所以填写的是http://[PrivateIpAddress]:[HostingServicePort],怎么使用自带的服务器,往后看
7、打Addressable资源包
在Addressables Groups窗口中,点击Build / New Build / Default Build Script,就会开始打Addressable资源包了,等它打包完毕即可
上文中我们建了两个Group,其中Default Local Group作为包体内的资源包,Packed Assets作为包体外的资源包,我们分别看看他们都build到哪去了。
首先看下Default Local Group,上图就可以看到在工程目录Library下
接着我们看下Remote Group打出来的资源包,在工程目录的ServerData目录下,这是打包自动新建的,这里的资源是需要放到远程服务器加载。
8、加载Addressable资源
我们加载资源的时候,并不需要知道目标资源到底是在哪个Group中,也不需要知道这个Group到底是本地资源包还是远程资源包,统一通过资源的Addressable Name来加载,资源的Addressable Name在哪里看呢?
比如Capsule预设,在Inspector窗口中,可以看到它的Addressable Name为d,这个名字是我们自己改的,不然就是显示默认路径。
开始写代码,首先引入命名空间
using UnityEngine.AddressableAssets;
然后使用Addressables.LoadAssetAsync方法加载资源,监听Completed 回调,在回调中拿到资源然后进行操作,示例:
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)
{
//不能用这个方式加载,用它加载不能完全释放不能动态新增资源
//Addressables.LoadAssetAsync<GameObject>(name).Completed += (obj) =>
//{
// gam = obj.Result;
// Instantiate(gam);
//};
//用这个方式加载资源
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());
}
}
把脚本挂在场景中,运行Unity,可以看到,正常加载了Capsule并实例化了
9、Addressable资源三个加载模式
上面是默认从Asset Database加载的,Addressables系统为了方便我们在Editor环境下方便测试,默认都是直接从Asset Database加载的,我们可以在Addressables Groups窗口的Play Mode Script中进行切换,建议编辑器环境下使用Use Asset Database (fastest)即可
Use Asset Database (fastest) 直接加载文件而不打包,快速但Profiler获取的信息较少
Simulate Groups (advanced) 在不打包的情况下模拟AssetBundle的操作
Use Exising Build(requires built groups) 实际上是从AssetBundle打包和加载
9.1、Use Asset Database (fastest)
在这个模式下,Addressables系统会直接从AssetDatabase加载资源,我们 不需要 Build打Addressable资源包,这个加载速度最快,建议在项目开发阶段使用这个模式,加载速度快
9.2、Simulate Groups (advanced)
这个模式下,也是不需要 Build打Addressable资源包的,是模拟资源包加载
9.3、Use Exising Build(requires built groups)
这个模式下,需要先执行Build打出Addressable资源包,它会根据Load Path去加载真正的AssetBundle文件并读取资源。如果不先Build,运行时会报错
10、加载远程Addressable资源
我们上面的Packed Assets是打成包外资源的,我们想要在Editor环境下测试远程加载,这个时候就需要先搭建一个Web服务器了,支持通过http请求来获取资源。Addressable系统已经帮我们做了一个Hosting Services工具,方便我们快速启动一个Web服务器。
点击菜单Window / Asset Management / Addressables / Hosting
接着点击Create / Local Hosting,创建一个本地Web服务器
然后勾选Enable
这样我们就开启了一个本地的服务器了,IP地址是我本机的局域网IP,我可以通过localhost进行访问,注意这里的端口号是58719。
我们可以看到,它对我们上文中提到的两个文件夹目录进行了Hosting
11、加载远程的资源
上面我们已经打了build资源包,这里直接改代码加载远程资源Cube,也就是名字c。
void Start()
{
//btn.onClick.AddListener(() => BtnClick(inp.text));
//freeResBtn.onClick.AddListener(() => BtnShif(inp.text));
BtnClick("c");
}
运行效果,加载了远程资源c
12、看看Addressables是如何知道去哪里加载资源
我现在把资源托管到服务器上,我把RemoteLoadPath改为服务器的地址
这个打开方式
13、Group里的设置项和使用
图中1,如果要在程序运行状态下实时的更新刷新资源,就要把AssetBundleCRC选择Disables
图中2,BundleMode中有三个选项,第一个是把资源打到一起,第二个是把资源分开打成单个,第三个是根据Labels去打包,同一个Labels打到一起
图中3,BundleNamingMode是打出资源的名字,默认是第二个是按哈希值出包名,选第一个Filename是按自定义名字打包
14、打远程资源热更包
想要支持热更新,需要先开启Catalog,选中AddressableAssetSettings,然后勾选Build Remote Catalog
图中1,是定义打出的Catalog的自定义名字,不填就是哈希值
图中2,要远程资源热更需要勾选,选择自己定义的路径
实时动态热更和资源释放看这个文章来源:https://www.toymoban.com/news/detail-689225.html
好了,后面在加其他的。。。。。文章来源地址https://www.toymoban.com/news/detail-689225.html
到了这里,关于【Unity使用addressables制作资源热更+实时动态热更基本记录】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!