揭开Unity AssetBundle庐山真面目(二)

原文链接:http://blog.uwa4d.com/archives/ABtopic_2.html

在之前的分享揭开AssetBundle庐山真面目(一)中,我们主要剖析了4.x版本下的AssetBundle管理机制,那5.x版本究竟有些什么变化呢?今天我们来一探究竟。

同时如果你恰有相关疑问,欢迎后台留言给UWA,或者加入QQ群(465082844)讨论,当然也不要忘记关注UWA哦。


AssetBundle打包(5.x)基础

基本介绍

(1)唯一API

public static AssetBundleManifest BuildAssetBundles(string outputPath, BuildAssetBundleOptions      assetBundleOptions = BuildAssetBundleOptions.None,BuildTarget targetPlatform = BuildTarget.WebPlayer);

调用BuildPipeline.BuildAssetBundles,引擎将自动根据资源的assetbundleName属性(以下简称abName)批量打包,自动建立Bundle以及资源之间的依赖关系。

(2)打包规则

在资源的Inpector界面最下方可设置一个abName,每个abName(包含路径)对应一个Bundle,即abName相同的资源会打在一个Bundle中。如果所依赖的资源设置了不同的abName,则会与之建立依赖关系,避免出现冗余。

UWA Tech Doc

支持增量式发布,即在资源内容改变并重新打包时,会自动跳过内容未变的Bundle。因此,相比4.x,会极大地缩短更新Bundle的时间。

(3) 新打包选项

除了前文提到的,5.x下默认开启的三个选项(CompleteAssets ,用于保证资源的完备性;CollectDependencies,用于收集资源的依赖项;DeterministicAssetBundle,用于为资源维护固定ID)之外,5.x中新增了以下选项:

  • ForceRebuildAssetBundle
    用于强制重打所有AssetBundle文件;
  • IgnoreTypeTreeChanges
    用于判断AssetBundle更新时,是否忽略TypeTree的变化;
  • AppendHashToAssetBundleName
    用于将Hash值添加在AssetBundle文件名之后,开启这个选项,可以直接通过文件名来判断哪些Bundle的内容进行了更新(4.x下普遍需要通过比较二进制等方法来判断,但在某些情况下即使内容不变重新打包,Bundle的二进制也会变化)。

与4.x不同的是,对于移动平台,5.x下默认会将TypeTree信息写入AssetBundle,因此在移动平台上DisableWriteTypeTree选项也变得有意义了。

(4)Manifest文件

在4.x版本中,我们通常需要自行维护配置文件,以记录AssetBundle之间的依赖关系,并供运行时使用。而在5.x版本中,Manifest文件可以免去这一过程。

(5) Variant参数

Variant参数能够让AssetBundle方便地进行“多分辨率支持”,相关详解请移步下文。


AssetBundle 打包(5.x)进阶

在新系统中,添加了以下两个实用的新特性,也许能够给开发者带来事半功倍的效果。

(1) Manifest文件

在打包后生成的文件夹中,每个Bundle都会对应一个manifest文件,记录了Bundle的一些信息,但这类manifest只在增量式打包时才用到;同时,根目录下还会生成一个同名manifest文件及其对应的Bundle文件,通过该Bundle可以在运行时得到一个AssetbundleManifest对象,而所有的Bundle以及各自依赖的Bundle都可以通过该对象提供的接口进行获取。

(2) Variant参数

在资源的Inspector界面最下方,除了可以指定abName,在其后方还可以指定Variant。打包时,Variant会作为后缀添加在Bundle名字之后。相同abName,不同variant的Bundle中,资源必须是一一对应的,且他们在Bundle中的ID也是相同的,从而可以起到相互替换的作用。

UWA Tech Doc

当需要为手机和平板上的某个UI界面使用两套分辨率不同的纹理、Shader,以及文字提示时,借助Variant的特性,只需创建两个文件夹,分别放置两套不同的资源,且资源名一一对应,然后给两个文件夹设置相同的abName和不同的variant,再给UI界面设置abName,然后进行打包即可。运行时,先选择合适的依赖包加载,那么后续加载UI界面时,会根据已加载的依赖包,呈现出相对应的版本。

开发者注意事项

  • abName可通过脚本进行设置和清除,也可以通过构造一个AssetBundleBuild数组来打包。
  • 新机制打包无法指定Assetbundle.mainAsset,因此无法再通过mainAsset来直接获取资源。
  • 开启DisableWriteTypeTree可能造成AssetBundle对Unity版本的兼容问题,但会使Bundle更小,同时也会略微提高加载速度。
  • Prefab之间不会建立依赖,即如果Prefab-A和Prefab-B引用了同一张纹理,而他们设置了不同的abName,而共享的纹理并未设置abName,那么Prefab-A和Prefab-B可视为分别打包,各自Bundle中都包含共享的纹理。因此在使用UGUI,开启Sprite Packer时,由于Atlas无法标记abName,在设置UI界面Prefab的abName时就需要注意这个问题。

UWA Tech Doc

  • 5.x中加入了Shader stripping功能,在打包时,默认情况下会根据当前场景的Lightmap及Fog设置对资源中的Shader进行代码剥离。这意味着,如果在一个空场景下进行打包,则Bundle中的Shader会失去对Lightmap和Fog的支持,从而出现运行时Lightmap和Fog丢失的情况.而通过将Edit->Project Settings->Graphics下shader Stripping中的modes改为Manual,并勾选相应的mode即可避免这一问题。

UWA Tech Doc

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

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

相关文章

写了那么多 Java 代码,却不一定见过它的真面目

我们都知道那句著名的宣传语——「一次编写, 到处运行(Write Once, Run Anywhere)」,这是对 Java 平台无关性的精准概括。字节码 JVM 使其平台无关,与此同时也衍生出另一个无关性——语言无关性。像 Kotli…

Mysql的分布式(XA)真面目

Mysql-XA 一、XA是什么?二、MySQL中XA实现1.内部XA事务两阶段提交PC 2.外部XA事务 总结 一、XA是什么? XA 协议本就是为一个分布式事务协议,它规定了 XA PREPARE、XA COMMIT、XA ROLLBACK 等命令。XA 协议规定了事务管理器(协调者…

华为鸿蒙系统界面首次曝光,华为鸿蒙系统长这样,界面首次曝光,网友:谷歌内心很慌!...

华为鸿蒙系统长这样,界面首次曝光,网友:谷歌内心很慌! 最近关于华为的消息非常多,尤其是华为自己的系统——鸿蒙系统。相信很多人都在关注这个系统的研究进度,毕竟这个系统是我们国家的首例,如果…

关于面向对象的真面目

关于面向对象的真面目 面向对象是软件开发的综合技术 我们先从一个简单的问题开始介绍。 “为什么要基于面向对象来开发软件?” 不管谁问这样的问题,笔者都会这样回答: “为了轻松地开发软件。” 可能有的人听到“轻松”二字会感觉很意…

李彦宏简介

李彦宏简介 李彦宏,1991年毕业于北京大学信息管理专业,随后赴美国布法罗纽约州立大学完成计算机科学硕士学位。在美国的8年间,李彦宏先生先后担任了道琼斯公司高级顾问,《华尔街日报》网络版实时金融信息系统设计者,以…

李彦宏回应百度落后:我们擅长技术含量高的

2019年人工智能系统学: https://edu.csdn.net/topic/ai30?utm_sourcecsdn_bw BAT中,谁是老大不好说,但是论争议性,百度确实相对较多。 一方面,“百度搜索引擎已死”的说法愈演愈烈; 另一方面&#xff0c…

李彦宏们牛在哪里?中国十大CEO简历

NO.1 李彦宏 百度公司总裁 简历: 李彦宏,1991年毕业于北京大学信息管理专业,随后赴美国布法罗纽约州立大学完成计算机科学硕士学位。在美国的8年间,李彦宏先生先后担任了道?琼斯公司高级顾问,《华尔街日报》…

李彦宏如何拯救百度?

作者 | 何加盐 本文经授权转载自何加盐(ID:ihejiayan) 他智商超群,曾经是高考状元,北大才子,留美精英。 他阳光帅气,被誉为中国互联网企业家里面,最好看的美男子。 但他也身负无数骂…

致李彦宏的公开信:百度真的乏善可陈

致李彦宏的公开信:百度真的乏善可陈 曹政 | 企业信息化 | 出处:原创-IT| 2012年06月04日 10:40 | 阅读 576 次 文/DoNews专栏作家 曹政 拜读了网上关于李彦宏在百度联盟峰会的演讲实录,对其中若干观点实在不敢苟同,如鲠在喉。特发…

又是别人家的公司!李彦宏给创新员工发超 2000 万奖金……

2022年9月7日,2022百度秋日嘉年华暨百度最高奖颁奖典礼,在百度科技园顺利成功举行。百度创始人、董事长兼首席执行官李彦宏,为“大道”、“潮汐”、“拨云”三支团队分别颁发最高奖,奖金折合人民币超2000万元。 (截图自…

人物-李彦宏:李彦宏

ylbtech-人物-李彦宏:李彦宏 百度 创始人、董事长兼首席执行官 李彦宏,男,汉族, 无党派人士,1968年11月出生, 山西阳泉人,百度创始人、董事长兼首席执行官,全面负责百度的 战略规划和…

图表控件TeeChart干货分享(绘制2D、3D实时曲线---VC++示例源代码--网络首发)

最近接手了一个项目,其中涉及到MFC和实时曲线显示的问题,由于我之前从未接触过此类技术,现学现搞,把其间用到的觉得对初学者有用的东西,总结一下。 尤其是关于TeeChart控件部分,网上资料零碎,且…

winform上的统计图——新手向

今天看见一篇适合新手理解和使用WinForm Chart控件的文章 目录 图标的要素 一、图表实现 图表标题 图例 XY坐标轴 数据 二、代码实现 转载 图标的要素 这是一张普通的柱状统计图,包括了: 图表标题图例XY轴标题数据 一般在上位机中有这些要素…

老鼠屎地理信息可视化第三弹:Plotly+Pyecharts绘制地理坐标系线图

由于最近老鼠屎做的东西和地图上的线型图相关,因此在这里做一点简单总结。很多地方都调试得很不理想,希望成功的地方可以给大家带来一点点启发,不理想的地方也欢迎大神们赐教。 1 Plotly 1.1 地图上绘制线 有关pyplot的相关在老鼠屎的博文使…

Echarts 地理信息可视化:基于地图显示坐标点信息

Ecahrts 基于地理信息的可视化 Echarts 是一款基于js的交互式图表工具 这一模型可用于显示气候、地理、人流等各种信息。 1、环境 在线调试echarts的功能可以在官网,选择实例下任意一个点开: 然后在左侧的编辑框中即可编辑(其中包含了自动渲染脚本&…

数据可视化图表-散点图(Scatter plot)

本文是接着这篇内容的:https://blog.csdn.net/Cassiel60/article/details/88350442 散点图是用于研究两个变量之间关系的经典的和基本的图表。 如果数据中有多个组,则可能需要以不同颜色可视化每个组。 在 matplotlib 中,您可以使用 plt.sca…

实战PyQt5: 155-QChart图表之极坐标图表

在前面的图表中,我们使用的坐标系都是直角坐标系(也称笛卡尔坐标系), 但是有些数据序列,使用极坐标系来显示更合理(比如常见的雷达图)。QChart中,提供QPolarChart来实现用极坐标系显示的图表。 QPolarChart QPolarChart在极坐标图中显示数据…

2022-04-22 工作记录--Highcharts-图表点击事件 + 图例点击事件 + 图例格式化后的回调

Highcharts-图表点击事件 图例点击事件 图例格式化后的回调 一、前言 看似很简单的问题,其实里面有很多细节,所以做个笔记哟~❀ 如下图:上面是图表,下面是图例哟☺️ 二、官方文档 https://www.highcharts.com.cn/docs 三、…

XCL-Charts图表库简要教程及常见问题

这个Andriod图表库项目从开始至现在,热情消耗几近殆尽。还好已基本实现我想做的那些东西。趁还剩下点兴趣,把一些点非常简单的归纳一下。 所支持的图表类型: 基类 图表名称 BarChart 横/竖向柱形图及背向式柱…

使用Google Chart API 创建实时图表

实时图表可以实时显示数据。这意味着数据将永久更新以始终显示当前图表。要创建实时图表,我们使用JavaScript和Google Chart API。 这些实时图表通常用于仪表板中,以显示例如温度或价格的变化情况。应用领域多样,它们看起来确实不错。你自己看…