Unity Addressable使用之检测更新流程

补充知识

关键文件说明

Addressable打包后会生成多种文件,主要包括 .hash.json  .bundle 文件,它们各自有不同的作用。

.hash 文件(哈希文件)

作用

  • 用于 版本对比,检查资源是否有更新。
  • 存储的是 资源目录(Catalog)的哈希值,客户端在初始化时对比本地和远程的 .hash 文件,判断是否需要更新资源。

特点

  • 文件很小,只包含一个哈希字符串(如 SHA-256)。
  • 每次构建 Addressables 时都会重新生成,确保唯一性。
  • 用于 增量更新,避免重复下载未变化的资源。

.json 文件(资源目录文件)

作用

  • 存储 资源的元数据,包括:
    • 所有可寻址资源的 Key(如 "Assets/Prefabs/Player.prefab")
    • 资源的 依赖关系
    • 资源所在的 AssetBundle 名称
    • 资源的 加载路径(远程 URL 或本地路径)文件名示例

特点

  • 是 Addressables 系统的 核心索引文件,客户端必须先加载它才能正确加载资源。
  • 如果远程 .hash 不同,客户端会下载新的 .json 文件,并对比哪些资源需要更新。

.bundle 文件(AssetBundle 文件)

作用

  • 存储 实际的资源数据(如 Prefab、Texture、Scene 等)。
  • 每个 .bundle 文件可能包含 多个资源(取决于 Addressables 的打包策略)。

特点

  • 采用 Unity 的 AssetBundle 压缩格式(LZMA/LZ4/Uncompressed)。
  • 客户端在加载资源时,会根据 .json 文件的索引找到对应的 .bundle 文件并加载。
  • 可以按需下载,减少初始包体大小。

文件之间的关系

  1. .hash → 告诉客户端是否需要更新。
  2. .json → 告诉客户端资源在哪里、如何加载。
  3. .bundle → 实际存储资源数据。

这些文件共同构成了 Addressables 的 资源管理机制,使得 热更新(Hot Update)按需加载 成为可能。

检测更新流程

1、初始化 Addressables 系统

2、检查内容更新状态

3、获取需要下载的大小

4、执行资源下载

5、完成更新

细节流程

  1. 客户端启动,检查 catalog.hash 是否与服务器一致。
  2. 如果不一致,下载新的 catalog.json
  3. 对比新旧 catalog.json,找出需要更新的 .bundle 文件。
  4. 下载新增或修改的 .bundle 文件。

void Start()
{keys = new List<object>();StartCoroutine(AAInit());
}IEnumerator AAInit()
{//第一步  Addressable模块初始化var initialLogic = Addressables.InitializeAsync(false);yield return initialLogic;//第二步 检查Catalog是否有更新var catalogLogic = Addressables.CheckForCatalogUpdates(false);yield return catalogLogic;if (catalogLogic.Status == AsyncOperationStatus.Succeeded){var catalogs = catalogLogic.Result;if(catalogs != null && catalogs.Count > 0){Debug.Log($"发现{catalogs.Count}个更新  更新内容:{string.Join("\n",catalogs)}");// 更新catalogvar updateHandle = Addressables.UpdateCatalogs(catalogs,false);yield return updateHandle;var locatorList = updateHandle.Result;//待下载列表foreach(var locator in locatorList){keys.Clear();keys.AddRange(locator.Keys);//获取需要下载的内容大小var getDownLoadSize = Addressables.GetDownloadSizeAsync(keys);Debug.Log(getDownLoadSize.Result);if (getDownLoadSize.Result > 0){// 执行资源下载var downLoadData =Addressables.DownloadDependenciesAsync(keys, Addressables.MergeMode.Union, false);while (!downLoadData.IsDone){Debug.Log($"下载进度: {downLoadData.PercentComplete * 100}%");yield return null;}yield return downLoadData;if (downLoadData.Status == AsyncOperationStatus.Succeeded){Debug.Log("下载成功!");}else{Debug.Log("下载失败!");}Addressables.Release(downLoadData);}}Addressables.Release(updateHandle);}else{Debug.Log("catalog没有需要更新的数据!");}Debug.Log("检测完成");}else{Debug.Log("检测资源失败.....");}//最后一步 释放资源 Addressables.Release(initialLogic);//释放操作句柄,避免内存泄漏Addressables.Release(catalogLogic);
}

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

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

相关文章

Elasticsearch 中实现推荐搜索(方案设想)

1. 存储商品数据的数据类型 为了支持推荐搜索&#xff0c;商品数据通常需要包含以下字段&#xff1a; 商品索引结构 PUT /products {"mappings": {"properties": {"product_id": {"type": "keyword" // 商品 ID},"…

Aerotech系列(4)Aerotech.A3200名空间

IconTypeDescriptionAxisMask Represents a selection of axes Controller Represents a controller Allows configuring and c

React Router 是怎么实现灵活导航的?

&#x1f399; 欢迎来到《前端达人 React播客书单》第 21 期。 视频版&#xff08;播客风格更精彩&#xff09; 今天我们不讲 Hook&#xff0c;来拆解前端开发中另一个高频组件&#xff1a;React Router 的进阶导航模式。 你可能用过 <Link> 或 <Route>&#xff0…

Modbus TCP转Profibus DP网关与JF - 600MT 称重变送器轻松实现数据互换

Modbus TCP转Profibus DP网关与JF - 600MT 称重变送器轻松实现数据互换 在工业自动化领域&#xff0c;不同设备之间的通信与数据交互至关重要。Modbus TCP转Profibus DP网关作为连接不同协议设备的关键桥梁&#xff0c;发挥着不可或缺的作用。本文将以JF - 600MT称重变送器与3…

聊聊 SQL 注入那些事儿

相信大家对于学校们糟糕的网络环境和运维手段都早有体会&#xff0c;在此就不多做吐槽了。今天我们来聊一聊SQL注入相关的内容。 何谓SQL注入&#xff1f; SQL注入是一种非常常见的数据库攻击手段&#xff0c;SQL注入漏洞也是网络世界中最普遍的漏洞之一。大家也许都听过某某学…

多传感器融合

目录 多传感器融合 多传感器融合的方向 传感器融合方案介绍 LOAM LIO-SAM LVI-SAM 多线激光雷达性质 什么是运动畸变 两步优化的帧间里程记 IMU 器件介绍及选型建议 IMU 标定方法简介 视觉里程计 VS 激光里程计 LVI-SAM 激光视觉融合思路简介 多传感器融合工程实践经验与技巧 多…

Auto-GPT vs ReAct:两种智能体思路对决

目录 Auto-GPT vs ReAct&#xff1a;两种智能体思路对决 &#x1f9e0; 一、智能体的演化背景 &#x1f9e9; 二、Auto-GPT&#xff1a;自循环的执行体 &#x1f50d; 三、ReAct&#xff1a;推理 行动的交错协同 ⚔️ 四、对比总结 &#x1f6e0; 五、你该选谁&#xff…

本地部署大模型性能测试,DeepSeek-R1-0528-Qwen-8B 依然是我的不二之选

大家好&#xff0c;我是 ai 学习的老章 介绍一个大模型并发性能测试工具 看一下我高频使用的&#xff0c;在2*4090显卡上部署的 DeepSeek-R1-0528-Qwen-8B 性能如何 _我_特别喜欢的三个DeepSeek版本 DeepSeek-R1-0528 蒸馏 Qwen3:8B 大模型&#xff0c;双 4090 本地部署&am…

华为云Flexus+DeepSeek征文|华为云 Dify 高可用部署教程:CCE 容器集群一键构建企业级智能应用

前言 在数字化转型加速的企业级应用场景中&#xff0c;构建高可用智能平台已成为业务创新的核心驱动力。本文深度解析基于华为云CCE容器服务的Dify智能应用部署实践&#xff0c;揭示如何通过云原生架构与AI技术的深度融合&#xff0c;实现企业知识管理、智能客服等场景的敏捷落…

Linux 多进程间通信(IPC)详解

在 Linux 系统中,多进程通信(Inter-Process Communication, IPC) 是实现多个进程之间数据交换和同步的重要机制。由于每个进程拥有独立的地址空间,因此需要借助特定的系统机制来实现信息共享。 📌 Linux 下常见的 6 种进程间通信方式 管道(Pipe)命名管道(FIFO)消息队…

服务器数据恢复——异常断电导致服务器故障的数据恢复案例

服务器数据恢复环境&#xff1a; 某服务器上有一组由12块硬盘组建的raid5磁盘阵列。 机房供电不稳定导致机房中该服务器非正常断电&#xff0c;重启服务器后管理员发现服务器无法正常使用。 意外断电可能会导致服务器上的raid模块损坏。 服务器数据恢复过程&#xff1a; 1、将故…

微信小程序中 rpx与px的区别

在微信小程序中的rpx比px方便的多 <!--pages/welcome/welcome.wxml--> <!--rpx替换px--> <image style"width:200rpx;height: 200rpx"src"/images/avatar/3.png"></image> <text>你好&#xff0c;冻梨</text> <but…

python3实现QQ官方机器人回调验证

考虑到第三方的机器人现在越来越难维持了&#xff0c;来捣鼓一下官方的机器人。虽然官方藏着掖着不肯开放很多功能&#xff0c;但起码能用。官方机器人的优点是稳定&#xff0c;只要申请成功&#xff0c;且你自己不乱搞&#xff0c;基本不存在被封的可能&#xff0c;缺点是藤子…

基于Vue3+TS的自定义指令开发与业务场景应用

文章目录 1. 前言2. 基础概念与优势​3. Vue3TS自定义指令的创建与注册​3.1. 创建自定义指令​3.2. 注册自定义指令​ 4. 实际场景示例​4.1. 权限指令控制​4.2. 图片懒加载指令​ 5. 优化与注意事项​ 1. 前言 在 Vue3 的开发生态中&#xff0c;自定义指令是一项极为灵活且…

Elasticsearch 索引文档的流程

Elasticsearch 索引文档的流程是一个分布式、多阶段的过程&#xff0c;涉及客户端请求、路由、主副本同步及持久化等步骤&#xff0c;具体流程如下&#xff1a; 一、客户端请求与路由 1.1 文档接收与路由计算‌ 客户端通过 REST API 发送文档写入请求&#xff0c;需指…

【unity】批量剔除图片四周空白像素的工具

摘要&#xff1a;Unity图片空白像素批量处理工具 该工具提供两种方式批量剔除图片空白像素&#xff1a; 静态处理类&#xff1a;提供TrimTexture方法&#xff0c;可读取纹理像素数据&#xff0c;计算非透明区域边界&#xff0c;生成裁剪后的新纹理&#xff1b;SaveTexture方法…

可编辑64页PPT | 基于DeepSeek的数据治理方案

荐言摘要&#xff1a;在数据量爆炸式增长且业务需求日益复杂的当下&#xff0c;企业数据治理面临着数据分散、标准混乱、价值挖掘难等诸多挑战。我们基于DeepSeek强大的智能能力&#xff0c;为企业量身打造创新数据治理方案。 DeepSeek凭借其卓越的自然语言处理和深度学习技术…

启用AWS VPC流日志保存到CloudWatch日志组

目标 启用VPC流日志 启用流日志 选择vpc&#xff0c;开始启用流日志&#xff0c;如下图&#xff1a; 设置名称和日志组&#xff0c;创建流日志&#xff0c;如下图&#xff1a; 参考 AWS云中的VPC启用流日志保存S3&#xff08;AWS中国云&#xff09;创建发布到 CloudWatc…

游戏引擎学习路径与技术栈指南

游戏引擎架构全景图&#xff08;基于GAMES104 V2.2思维导图&#xff09; graph TDA[基础架构] --> A1[面向数据管理]A --> A2[任务系统]A1 --> A11[ECS架构]A1 --> A12[内存优化]A2 --> A21[Job System]A2 --> A22[依赖调度]B[工具链] --> B1[编辑器框架]…

预训练大语言模型

Encoder-only model&#xff08;Autoencoding model&#xff09; 使用掩码语言模型&#xff08;Masked Language Modeling, MLM&#xff09;进行预训练输入原始语句和掩码&#xff0c;训练目标是预测掩码标记&#xff0c;一遍重建原始句子->也称为降噪目标&#xff08;deno…