Addressable 资源管理全解

news2024/11/26 12:32:49

这里写目录标题

  • 一、什么是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~1
        float 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.coloradmin.cn/o/720596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Neo4j docker 部署

想要运行简单测试一下neo4j&#xff0c;就直接使用docker创建了一个容器&#xff0c;并用cypher-shell本地连接neo4j&#xff0c;创建图进行测试。 1 开启docker sudo systemctl start docker2 拉取镜像源 sudo docker pull neo4j # 默认latest版本3 查看本地镜像&#xff0…

二叉树之按之字形顺序打印二叉树

主要看队列的应用与了解&#xff0c;就是利用先进先出的特点。先把每个节点塞入队列&#xff0c;再根据先进先出的特点来把自身值传入一维vector数组中去。 /*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* TreeNode(int x) : val(x), l…

作为爬虫工程师,自动化和抓包你说不了解的selenium采集内容篇!

前言 作为爬虫工程师&#xff0c;掌握Selenium采集是非常有用的&#xff0c;因为有些网站采用了动态加载、javascript渲染或AJAX技术&#xff0c;这些技术使得使用传统的静态HTML解析库难以获取到完整的数据。Selenium是一个自动化测试工具&#xff0c;它可以模拟用户在浏览器…

java特征:多态性

文章目录 多态的形式和体现对象的多态性多态的理解举例**1、方法内局部变量的赋值体现多态****2、方法的形参声明体现多态****3、方法返回值类型体现多态** 成员变量没有多态性向上转型与向下转型为什么要类型转换如何向上或向下转型instanceof关键字 多态的形式和体现 对象的…

【电路原理学习笔记】第2章:电压、电流和电阻:2.4 电流

第2章&#xff1a;电压、电流和电阻 2.4 电流 电压为电子提供能量&#xff0c;使它们能够在电路中运动。在金属导体中&#xff0c;电子的运动就是电流&#xff0c;电流的存在意味着在电路中存在着做功的过程。 自由电子存在于导体和半导体中。这些价电子层上的电子可以从材料…

微信小程序数据绑定及渲染

微信开发文档&#xff1a;WXML | 微信开放文档 (qq.com) 数据绑定 简单数据绑定 小程序原生支持数据的双向绑定&#xff0c;在wxml文件里面可以使用 Mustache 语法(双{{ }}方法)绑定js文件中data里面的属性 示例&#xff1a; wxml文件内容&#xff1a; <view> {{ mess…

ChromaVerse专注于AIGC元宇宙产业

在元宇宙与互联网 3.0 概念的推动下&#xff0c;各种虚拟数字人扑面而来&#xff0c;AIGC 产业成为各方关注的重点。未来 AI 发展已经成为全球科技领域的热点和趋势。AI 技术的快速进步和广泛应用正在改变人们的生活和工作方式&#xff0c;为各行各业带来了巨大的机遇和挑战。在…

Jmeter接口测试,怎么在下一个接口调用上一个接口的数据

1、简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试但后来扩展到其他测试领域。 它可以用于测试静态和动态资源例如静态文件、Java 小服务程序、CGI 脚本、Java 对象、数据库&#xff0c; FTP 服务…

MacOS在终端中使用sshpass命令登录服务器

MacOS在终端中使用sshpass命令登录服务器&#xff08;堡垒机&#xff09; sshpass 可以解决ssh时密码交互输入的麻烦。 目前堡垒机不支持密钥&#xff0c;使用sshpass命令可以较便捷地连接服务器。 sshpass -p password ssh -p 22 userftm.test.com# 注意user中如果有&…

SpringBoot 基于Redis的消息队列(基于发布订阅模型)

SpringBoot下Redis消息队列(基于发布订阅模型) 1. 什么是生产者/消费者模式&#xff1f; 消息队列一般是有两种场景 1、种是发布者订阅者模式 2、种是生产者消费者模式 生产者消费者模式 &#xff1a;生产者生产消息放到队列里&#xff0c;多个消费者同时监听队列&#xff0…

详解DNS协议!

前言 想要不同的计算机之间进行通信&#xff0c;是需要知道对方的IP的&#xff0c;可是为什么我们平时很少用到ip&#xff0c;而是用到域名这种东西呢&#xff1f; 其实主要是为了方便阅读&#xff0c;让我们记住一串的ip还不如记域名来的方便。 当我们访问域名的时候&#xf…

【MYSQL基础】基础知识了解

基础概念 数据库(DataBase&#xff0c;简称DB)&#xff0c;用于存储和管理大量数据的仓库。 数据库特点 持久化存储数据的。其实数据库就是一个文件系统方便存储和管理数据使用了统一的方式操作数据库-- SQL 数据库有哪些 MYSQL: 开源免费的数据库&#xff0c;小型的数据库…

初出茅庐的小李博客之链表知识1

链表知识1&#xff1a; 数组的特点&#xff1a; 空间连续&#xff0c;方便访问&#xff0c;只要知道首元素地址&#xff0c;就可以访问每个元素 数组的缺点&#xff1a; 需要提前分配固定大小的空间&#xff0c;一旦分配大小就不能改变 &#xff0c;空间分配小了不够用&…

NeurIPS 2022 | HUMUS-Net:用于加速MRI重建的混合展开多尺度网络结构

文章目录 NeurIPS 2022 | HUMUS-Net&#xff1a;用于加速MRI重建的混合展开多尺度网络结构摘要方法 NeurIPS 2022 | HUMUS-Net&#xff1a;用于加速MRI重建的混合展开多尺度网络结构 Code: https://github.com/z-fabian/HUMUS-Net 摘要 在加速MRI重建中&#xff0c;患者的解剖…

vscode解决本地浏览器运行项目时的跨域问题-Live server

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 总结 最近在用face-api.js开发前端的实时人脸识别&#xff0c;加载已经训练好的tf模型&#xff0c;这一步需要加载模型json文件&#xff0c;但是本地测试的时候控制…

GAMES101笔记 Lecture 09 Shading3(Texture Mapping Cont.)

目录 Interpolation Across Triangles: Barycentric Coordinates(重心坐标)Interpolation Across Triangles(三角形内的插值)Why do we want to interpolate(我们为什么要在三角形内插值)What do we want to interpolate?(我们想插值得到什么&#xff1f;)How do we interpola…

vue echarts k线图 子功能设置

1 图中自定义选择区间, 手动鼠标拉取区间显示 2 底部数据选择条 dataZoom: [{type: inside,xAxisIndex: [0, 1],start: 98,end: 100},{show: true, // 这个是打开数据 选择条xAxisIndex: [0, 1],type: slider,top: 85%,start: 98,end: 100}], 3 鼠标在 k线图 选择区域 显示 的…

短视频抖音账号矩阵系统源码开发者自研(三)

一、站在开发者角度布局开发本套体系系统 开发技术新的方向。通过持续的技术创新和用户需求分析&#xff0c;我们将更加注重个性化开发本套短视频矩阵源码系统&#xff0c;目前市面上涵盖的基本功能有视频剪辑、绑定发布、智能回复、数据统计等一些基本的功能。此外我们在开发…

El-table 懒加载表格中新增、删除遇到的问题

前言 我是用的版本是&#xff1a; 官方给的例子中只是一个单纯的展示&#xff0c;但实际需求中可能会有一些其他需求&#xff0c;比如新增、修改。 然后遇到了各种问题&#xff0c;因此记录一下。 记录 :tree-props"{ children: children, hasChildren: hasChildren }…

NumPy怎样使用花式索引或布尔索引访问元素?

除了整数索引之外&#xff0c;NumPy中还提供了两个形式比较复杂的索引——花式索引和布尔索引&#xff0c;下面对这两种索引的基本用法进行详细的讲解。 1.花式索引 花式索引指以整数组成的数组或列表为索引。当使用花式索引访问一维数组时&#xff0c;程序会将花式索引对应的…