Unity 热更--AssetBundle学习笔记 0.7

news/2024/10/14 16:27:44

AssetBundle

AB包是什么?

AssetBundle又称AB包,是Unity提供的一种用于存储资源的资源压缩包

Unity中的AssetBundle系统是对资源管理的一种扩展,通过将资源分布在不同的AB包中可以最大程度地减少运行时的内存压力,可以动态地加载和卸载AB包,继而有选择地加载内容。

AB包的优势有哪些?

  1. AB包的存储位置自定义。可以放入可读可写的路径下便于实现热更。
  2. 可以自定义压缩方式。对于压缩方式可以选择不压缩或者LZMA和LZ4等不同的压缩方式压缩,满足不同的网络传输需求。
  3. 资源可以分布在不同的AB包体中,可以最大程度减少运行时候的内存压力,做到即用即加载,针对性的加载。
  4. AB包支持后期进行动态更新。支持热更,可以显著减小初始安装包的大小,非必要的核心关卡可以跟随用户闯关进度来进行资源下载,提高用户的体验。

AB包与Resources的比较?

AB包 Resource
资源可分布在多个包中 所有资源打成一个大包
存储位置可自定义 必须放在Resources目录下
压缩方式灵活 资源全部压缩成二进制
支持后期进行动态更新 打包后资源只读无法动态更改

image-20240501205016476

AB包的特点与要求

  1. AB包无法直接存储C#脚本。代码的热更需要使用lua这类脚本语言,或者存储编译后的DLL文件。
  2. AB包不能重复进行加载。AB包已经加载进内存后必须卸载后才能重新加载。
  3. AB包之间是存在依赖关系的,在加载当前AB包时需要一并加载其所依赖的包。
  4. 打包完成后,会自动生成一个主包(主包名称随平台不同而不同),主包的manifest下会存储有版本号、校验码(CRC)、所有其它包的相关信息(名称、依赖关系)

AB包打包实操

  1. 下载导入Asset Bundles 资源包 【】

    img

  2. 将需要打包的资源进行分组分类

img

  1. 打开AssetBundle 打包窗口进行设置 Build 出包

image-20240501210647890

img

AB包的文件内容分为两类:

一类是资源文件(无后缀名称的)

另一类为mainfest文件 存储AB包体的信息和加载时候所需的关键信息、资源信息、版本信息、依赖关系等等

关键AB包(与目录名同名)为主包 和 AB包依赖的关键信息

image-20240501212511657

加载AB包中的资源

using System;
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
namespace LearnAssetBundle
{ public class LoadAsset : MonoBehaviour{private AssetBundle ab;private Image _image;private void Awake(){//获取AB包 打包的文件已经拷贝到streamingAssets文件下 从此位置加载//注意!AB包不能重复加载ab  = AssetBundle.LoadFromFile(Application.streamingAssetsPath +"/"+"model");_image = GameObject.Find("Canvas/Image").GetComponent<Image>();}void Start(){GameObject cube = ab.LoadAsset<GameObject>("cube");Instantiate(cube);//使用异步加载图片资源StartCoroutine(LoadPicRes("pic", "bk"));//释放掉  true 包括场景中的资源ab.Unload(false);}private IEnumerator LoadPicRes(string AbName, string picName){AssetBundleCreateRequest picAb = AssetBundle.LoadFromFileAsync(Application.streamingAssetsPath +  "/" + AbName);AssetBundleRequest abERes = picAb.assetBundle.LoadAssetAsync(picName, typeof(Sprite));yield return abERes;_image.sprite = abERes.asset as Sprite;}void Update(){//AB包资源的卸载if (Input.GetKeyDown(KeyCode.Space)){//卸载所有加载的AB包// true 包括场景中正在使用的资源  谨慎使用// false 仅卸载ab包的资源 场景中的资源不受影响AssetBundle.UnloadAllAssetBundles(false);}}}
}

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

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

相关文章

2024年4月文章一览

2024年4月编程人总共更新了5篇文章: 1.2024年3月文章一览 2.《自动机理论、语言和计算导论》阅读笔记:p139-p171 3.《自动机理论、语言和计算导论》阅读笔记:p172-p224 4.《自动机理论、语言和计算导论》阅读笔记:p225-p260 5.《自动机理论、语言和计算导论》阅读笔记:p26…

开源文档预览项目 kkFileView (9.9k star) ,快速入门

kkFileView 是一款文件文档在线预览解决方案,采用流行的 Spring Boot 框架构建,易于上手和部署。 该项目基本支持主流办公文档的在线预览,包括但不限于 doc、docx、xls、xlsx、ppt、pptx、pdf、txt、zip、rar,以及图片、视频、音频等格式。1 Docker 部署拉取镜像:# 网络环…

模拟集成电路设计系列博客——6.2.4 电流模式转换器

6.2.4 电流模式转换器 电流模式D/A转换器与电阻型转换器非常类似,但是可以用于更高速的应用。其基本的思想是将电流切换到输出或到地,如下图所示:因此输出电流通过\(R_F\)转换成电压,而每个电流源的上节点总是保持在地电压。电流型D/A转换器将在后续的温度计码D/A转换器章节…

模拟集成电路设计系列博客——6.2.3 电荷重分布开关电容转换器

6.2.3 电荷重分布开关电容转换器 电荷重分布开关电容转换器的基本思想是将开关电容增益放大器的输入电容替换为一个可编程电容阵列(PCA,Programmable Capacitor Array),如下图所示:如我们之前在开关电容增益放大器时讨论的一样,上图中的电路对于放大器输入失调电压,\(1/…

CF981F Round Marriage

传送门首先最小化最大,一眼鉴定为二分。二分这个最大值 \(k\),问题变成判断是否能让新郎新娘匹配,每一对距离 \(\le k\)。 如果把新郎新娘视作二分图,每个点只和距离 \(\le k\) 的点连边,问题就是求是否有完美匹配。 完美匹配判定,可以联想到 Halls 定理。 先把环复制一遍…

linux12-root

linux12-root为root用户设置密码 sudo passwd rootsu su, switch user, 切换用户 选项 -, 表示是否在切换用户后加载环境变量, 建议加 参数user不填写, 默认切换root用户 # 切换到root用户 su - root可以通过exit回退到上一个用户, 也可以用快捷键ctrl+dsudo super user do, 为…

PC-100垂直拉制仪使用指南

序言现在大部分的实验室配置的都是水平拉制仪(大部分是Sutter的P-97和P-1000)的普及,很多新的实验室也没有人配备垂直拉制仪,但是垂直拉制仪在制备锥度较长的吸附针呀、注射病毒这种用途时,比水平拉制仪更具优势,有时候,在水平拉制仪出故障或者比较急时,一些实验室也会…

linux10-echo重定向符tail

linux10-echo&重定向符&tailecho 在终端输出语句 echo "Hello World"echo输出命令 # 此处pwd被当做文本输出 echo pwd通过反引号``, 输出pwd执行内容 echo `pwd`重定向符> 将左侧命令的结果, 覆盖写入到右侧指定的文件中>> 将左侧命令的结果, 追加写…