Addressable 资源管理全解

这里写目录标题

  • 一、什么是Addresables
  • 二、导入Addressables
  • 三、创建Addressables Settings 资产包管理
  • 四、资源集合Group的基本操作(资源分包)
  • 五、设置远程资源包
  • 六、如何打包
  • 七、加载方式
        • 7-1. Mono脚本指定和实例化:
        • 7-2. 直接实例化指定物体
        • 7-3.异步回调加载
        • 7-4.异步直接实例化
        • 7-5.使用 async 、await的方式
        • 7-6.加载场景
  • 八、加载环境模拟
        • 1. Use Asset Database (fastest)
        • 2. Simulate Groups (advanced)
        • 3. Use Exising Build(requires built groups)
  • 九、查看引用分析面板
  • 十、Hosting Service 本地服务器
  • 十一、查看重复资源
  • 十一、WebGL平台问题
  • 十二、Unity版本选择
  • 十三、资源释放

一、什么是Addresables

Unity Addressable Asset system 提供了一个可以随着您的项目而增长的系统,无需编程即可以取代AssetBundle管理资源。
具备自分配地址功能,使用到时自动寻址加载、自动对本地移动资源进行跟踪并处理依赖关系。

二、导入Addressables

1.点击 Windows > PackageManager
2.搜索 Addressables ,并导入插件
3.Unity要求使用2019以后版本
在这里插入图片描述

注:实际项目中,建议大家下载 Addressables.CN 版本。
在这里插入图片描述

三、创建Addressables Settings 资产包管理

1.点击 Windows > Asset Management > Addressables > Groups
在这里插入图片描述

2.在弹出的 Addressables Group 窗口中点击 Create Addressables Settings 按钮,创建 AddressablesAssetsData
此时默认创建了一个组 Default Local Group (Default) , Addressable 默认按**Group**为节进行AssetBundle打包
即,此界面中可以创建多个 Group ,可存放资源,即会按 Group 为生成 AssetBundle.
在这里插入图片描述

3.创建 Addressable Settings 时工程中也会生成一个 AddressableAssetsData 文件夹,里面有很多设置文件。
在这里插入图片描述

四、资源集合Group的基本操作(资源分包)

1.在 Addressables Group 中可以通过点击空白处,创建新的 Group ,可用做包外资源组(远程资源包)
在这里插入图片描述

2.通过右键 Rename 可以修改 Group 名字
在这里插入图片描述

3.然后可以通过拖入或勾选资源 Inspector 窗口上的 Addressable 加入资源。
在这里插入图片描述

4.在创建 Group 时, AssetGroups 也会对应的生成 YAML 格式文件,记录资源内容与引导
在这里插入图片描述

五、设置远程资源包

1.选择 Group 或对应的 YAML 格式文件,在Inspector窗口可以看到构建路径 Build Path 和 加载路径 Load Path.
在这里插入图片描述
2.可以对应修改为 RemoteBuildPathRemoteLoadPath ,可以看到下面对应的地址也发生了改变。
在这里插入图片描述
这样构建和加载时就会去到以上对应的地址。

3.远程资源包的地址可以点击 Addressables Groups > Manager Profiles
在这里插入图片描述
Windows > Asset Management > Addressables > Profiles 按钮
在这里插入图片描述

4.打开 Addressables Profiles 窗口进行修改,如下图:在这里插入图片描述

可以先保持不动,下面会先用到这个地址。

六、如何打包

1.我们执行一下 Build / New Build / Default Build Script ,打出 Addressable 资源包,点击后等待一会,完成会有Log提示。
在这里插入图片描述

2.构建出来的本地资源Bundle会存放 Library 下指定地址内,如下图:
在这里插入图片描述

3.构建出来的远程资源工程 根目录下 会存放ServerData下指定地址内,如下图:
在这里插入图片描述

4.值得注意:
是本地资源是会随着APK打包在包体内的。
而远程资源则不会被打包进去 ,需要放到指定位置去加载。

七、加载方式

7-1. Mono脚本指定和实例化:

Mono 脚本 public AssetReference 指定和实例化:
如果我们声明的不是 AssetReference 类型,而是 GameObject 类型,那么场景就直接依赖了预设,这个预设会被打到场景中,但我们这里用的是 AssetReference ,场景并不会真的依赖Sphere预设,它是一个弱引用。

public AssetReference spherePrefabRef;
void Start()
{spherePrefabRef.LoadAssetAsync<GameObject>().Completed += (obj) =>{// 预设GameObject spherePrefab = obj.Result;// 实例化GameObject sphereObj = Instantiate(spherePrefab);};
}

7-2. 直接实例化指定物体

AssetReference 直接实例化指定物体:
同样, AssetReference 也提供了 InstantiateAsync 方法,方便一步到位进行实例化:

spherePrefabRef.InstantiateAsync().Completed += (obj) =>
{// 已实例化的物体GameObject sphereObj = obj.Result;
};

7-3.异步回调加载

例子 Addressables.LoadAssetAsync ,监听 Completed 回调,在回调中拿到资源然后进行操作:
我们加载资源的时间不需要知道资源在哪个 Group 中,也不需要知道资源在哪。只需要知道 Addressable Name
以此为加载依据即可,比如:
在这里插入图片描述

如图资源名字:Map1Bulid

Addressables.LoadAssetAsync<GameObject>("Map1Bulid").Completed += (handle) =>
{// 预设物体GameObject prefabObj = handle.Result;// 实例化GameObject cubeObj = Instantiate(prefabObj);
};

7-4.异步直接实例化

Addressables 还提供了 InstantiateAsync 接口,方便直接一步到位实例化,示例:

Addressables.InstantiateAsync("Map1Bulid").Completed += (handle) =>
{// 已实例化的物体GameObject cubeObj = handle.Result;
};

7-5.使用 async 、await的方式

使用 asyncawait 的方式,示例:

private async void InstantiateCube()
{// 虽然这里使用了Task,但并没有使用多线程GameObject prefabObj = await Addressables.LoadAssetAsync<GameObject>("Map1Bulid").Task;// 实例化GameObject cubeObj = Instantiate(prefabObj);// 也可直接使用InstantiateAsync方法// GameObject cubeObj = await Addressables.InstantiateAsync("Map1Bulid").Task;
}

7-6.加载场景

使用 Addressables.LoadSceneAsync 加载场景

StartCoroutine(LoadScene());
private IEnumerator LoadScene()
{var sceneHandle = Addressables.LoadSceneAsync("NewScene");if (sceneHandle.Status == AsyncOperationStatus.Failed){Debug.LogError("场景加载异常:" + sceneHandle.OperationException.ToString());}while (!sceneHandle.IsDone){//监控进度0~1float progress = sceneHandle.PercentComplete;Debug.Log("加载进度:" + progress);yield return null;}Debug.Log("加载完毕:");
}

八、加载环境模拟

Addressables资源加载模式有三个,如下,默认情况下是Use Asset Database (fastest)
在这里插入图片描述

1. Use Asset Database (fastest)

可以直接从AssetDatabase加载资源,避免打包过程,因此加载速度很快。但是这种方式获取的Profiler信息较少,因为Addressables系统不需要打包资源,所以不会产生AssetBundle的缓存信息。因此,在项目开发阶段,建议使用这种非打包方式,以快速加载资源。

2. Simulate Groups (advanced)

这种模式下,是通过模拟AssetBundle的操作,以获取与打包方式类似的Profiler信息。但不同于直接从AssetDatabase加载资源,其会模拟出AssetBundle的缓存信息,然后通过分析这些信息来获取Profiler数据。因为不需要打包Addressable资源包,所以也无需执行Build操作。因此,这种模式既快又能够获取丰富的Profiler信息,是一个很好的开发调试方式。

3. Use Exising Build(requires built groups)

在这种模式下,仍然需要执行Build操作,将资源打包为Addressable资源包。在运行时,Addressables系统会根据Load Path去加载实际的AssetBundle文件并读取资源。与前面两种模式不同的是,这个模式需要打包资源,所以需要先执行Build操作。如果不先Build,运行时会无法加载资源,导致程序报错。因此,这种模式适用于项目发布或上线前的阶段,以确保资源能够被正确加载。

九、查看引用分析面板

1.点击菜单 Project > AddressableAssetsData > AddressableAssetSettings
在这里插入图片描述

2.在 Inspector 窗口中找到 Send Profiler Events 并勾选(不同版本位置不一样)
在这里插入图片描述

3.然后点击 Windows > Asset Management > Addressables > Event Viewer
在这里插入图片描述

4.打开 **Addressables Event Viewer**窗口,即可看到资源使用情况,引用次数等信息。

在分析器中可以看到我们实例化出来的预设所依赖的资源,还可以看到引用计数等信息,虽然我们没有打出AssetBundle包,
但却模拟了类似从AssetBundle包中加载资源的效果,这样可以方便我们快速分析加载策略,
在这里插入图片描述

十、Hosting Service 本地服务器

这个功能可用于在本地环境模拟加载远端服务器资源(win11系统的慎用,不稳定)
点击菜单 Window / Asset Management / Addressables / Hosting ,接着点击 Create / Local Hosting,创建一个本地Web服务器,
在这里插入图片描述

然后勾选 Enable
在这里插入图片描述

这样我们就开启了一个本地的服务器了,IP地址是我本机的局域网IP,我可以通过localhost进行访问,注意这里的端口号是55716。
我们可以看到,它对我们上文中提到的两个文件夹目录进行了 Hosting
在这里插入图片描述

十一、查看重复资源

1.使用此功能查看重复引用的资源,在AddressablesGroup中选择 Tools > Window > Analyze 打开 **Addressables Analyze**窗口

2.如下图操作
在这里插入图片描述

3.经过一段时间的等待,即可查看在不同包间重复引用的资源,从而方便我们调整分配打包

十一、WebGL平台问题

1.外部包用时编辑器无法正确读取webgl资源
2.将资源组下 Use Asset Bundle Cache 勾选去掉
在这里插入图片描述

3.在编辑器下还是会看不到,发布出webGl就好了。

十二、Unity版本选择

1.用官方推荐的几个版本不然容易出些奇怪的问题

十三、资源释放

1.下面是资源加载后对应的释放方式 Addressables.LoadAssetAsync 加载的,配套用 Addressables.Release 进行卸载
例子:
//获取资源与实例化

Addressables.LoadAssetAsync<GameObject>("ModelHero0").Completed += (res) =>{ThisObj = res.Result;GameObject sphereObj = Instantiate(ThisObj);
};
//销毁和释放资源
GameObject.Destroy(ThisObj);
Addressables.Release(ThisObj);

下面以以看到加载时开时有引用计数,销毁会清除
在这里插入图片描述

2.场景场景加载使用 Addressables.LoadSceneAsync 卸载使用 Addressables.UnloadSceneAsync

3.使用 Addressables.InstantiateAsync 实例化的可以使用,配套的 Addressables.ReleaseInstance 可直接卸载并清除引用
举例:

//加载并实例化
Addressables.InstantiateAsync("ModelHero0").Completed += (obj) =>{ ThisObj = obj.Result; };
//卸载并清除引用
Addressables.ReleaseInstance(ThisObj);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/9564.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【测试效率提升技巧】xmind测试用例转换为excel工具使用手册

【测试效率提升技巧】xmind测试用例转换为excel工具使用手册 一、前置环境配置二、执行Xmind2testcase的转换方法1.在控制台输入xmind2testcase [path/xmind文件路径] [-csv] [-xml] [-json]&#xff0c;例&#xff1a;xmind2testcase /root/homin/XX测试点.xmind -csv ##在当前…

基于OIDC的SSO单点登录

文章目录 什么是SSO&#xff08;Single Sign On&#xff09;单点登录OIDC&#xff08;Open ID Connect&#xff09;SSO服务授权流程&#xff08;OIDC&#xff09;授权模式授权码模式授权码模式授权流程请求授权码过程 授权模式对比总结 什么是SSO&#xff08;Single Sign On&am…

MySQL数据库索引机制

文章目录 一、MySQL缓冲区二、MySQL的page1.认识单个page2.认识多个页3.聚簇索引和非聚簇索引 三、索引的操作1.创建主键索引2.创建唯一索引3.创建普通索引4.查询索引的方法5.删除索引的方法6.索引创建原则 一、MySQL缓冲区 MySQL是一款有客户端和服务端的网络应用&#xff0c…

Ubuntu学习笔记(一)——目录与路径

文章目录 前言一、相对路径与绝对路径1.绝对路径&#xff08;absolute&#xff09;2.相对路径&#xff08;relative&#xff09; 二、目录相关操作命令1.cd(change directory, 切换目录)2.pwd(print working directory, 显示目前所在的目录)3.mkdir(make directory, 建立新目录…

简单认识LVS-DR负载群集和部署实例

文章目录 一、LVS-DR负载群集简介1、DR模式数据包流向分析2、DR 模式的特点 二、DR模式 LVS负载均衡群集部署 一、LVS-DR负载群集简介 1、DR模式数据包流向分析 1、客户端发送请求到 Director Server&#xff08;负载均衡器&#xff09;&#xff0c;请求的数据报文&#xff0…

jvm自带故障处理工具之jmap

jmap是java虚拟机自带的一种内存映像工具。 一般通过jmap可以生成堆的当前使用情况的快照&#xff0c;然后用它来分析或者调优JVM内存使用。 jmap -help jmap -histo:live pid 打印堆的直方图。对于每个Java类&#xff0c;将打印对象数&#xff0c;以字节为单位的内存大小以…

【深入浅出 Spring Security(七)】RememberMe的实现原理详讲

RememberMe 的实现原理 一、RememberMe 的基本使用二、RememberMeAuthenticationFilter 源码分析RememberMeServicesTokenBasedRememberMeServicesTokenBasedRememberMeServices 中对 processAutoLoginCookie 方法的实现总结原理图式 三、提高安全性PersistentTokenBasedRememb…

MySQL安装与部署

第一种方法&#xff1a;在线安装 配置一个安装yum源 Adding the MySQL Yum Repository 可以手动配置yum源&#xff0c;baseurl指向国内镜像源地址&#xff0c;比如清华、中科大。 Installing MySQL Starting the MySQL Server&#xff1a; 查询临时登录密码 修改数据库密码…

Linux内核代码中常用的数据结构

Linux内核代码中广泛使用了数据结构和算法&#xff0c;其中最常用的两个是链表和红黑树。 链表 Linux内核代码大量使用了链表这种数据结构。链表是在解决数组不能动态扩展这个缺陷而产生的一种数据结构。链表所包含的元素可以动态创建并插入和删除。 链表的每个元素都是离散…

eBPF内核技术在滴滴云原生的落地实践

将滴滴技术设为“星标⭐️” 第一时间收到文章更新 导读 eBPF是Linux内核革命性技术&#xff0c;能够安全高效地扩展内核能力&#xff0c;应用广泛&#xff0c;尤其是在云原生可观测性领域的应用已经成为行业热点。在滴滴云原生环境中&#xff0c;eBPF技术进行了业务实践和内源…

CesiumJS使用详细,在vue中使用Cesium.js(WebGIS中的Cesium地图可视化应用)

简述&#xff1a;Cesium是一种基于WebGL开源的虚拟地球技术&#xff0c;可以用于构建高性能、跨平台的三维地球应用程序&#xff0c;它支持多种数据格式和地图服务&#xff0c;可以实现地球表面的高精度渲染、地形分析、数据可视化等功能。Cesium还提供了丰富的API和插件&#…

青岛大学_王卓老师【数据结构与算法】Week04_05_双向链表的删除_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c;另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础–…