【Unity3D技术文档翻译】第1.2篇 为打包 AssetBundles 准备资产
本章原文所在章节:【Unity Manual】→【Working in Unity】→【Advanced Development】→【AssetBundles】→【Preparing Assets for AssetBundles】
为 AssetBundles 准备资产(Assets)
你可以将任何资产,打包到任何你想要的 AssetBundle 中,这是你的自由。然而,在你创建 AssetBundles 的时候,有些策略可供参考。当你在面对具体项目的时候,可以从下面这些分组策略中,找到一个合适的去使用。你可以随意混合、搭配这些策略。
逻辑实体分组策略
“逻辑实体分组策略”是指:在将资产(assets)分配到 AssetBundle 的时候,考虑到的是这些资产,代表了某个项目的某个功能性部分。比如:UI界面、游戏角色、游戏环境设施,以及其他任何会在应用的生命周期中频繁出现的部分。
举例说明
- 把一个UI界面的所有纹理(textures)和布局数据,打包到一起
- 把一个或者一系列游戏角色的模型和动画动作,打包到一起
- 把需要在多个场景中共享的纹理(textures)和模型,打包到一起
“逻辑实体分组策略”对于可下载内容(DLC)是个理想的解决方案,因为在这种策略下,所有资产都是被分隔开的。于是,你可以只改变单个实体,而无需去下载其他额外的、并没有改变的资产。
正确地使用这个策略的最大技巧和注意事项是:开发者在给每个 AssetBundle 分配资产的时候,必须明确地知道,每个资产在什么时候,以及什么地方会被项目用到。
类型分组策略
使用这个策略,你将会把类型相似的资产打包到一起,比如:音频文件、本地化语言文件等。
“类型分组策略”对于跨平台应用是个非常好的策略。例如,如果你的音频文件在 windows 和 mac 平台使用相同的压缩方法,那么你就能将所有音频资源打包到一个(或者多个,如果资源太多的话) AssetBundle 中,并且可以反复使用这些 AssetBundles 。相反的一个例子是:mac 上压缩好的着色器(shaders),在 windows 中是不能使用的。
此外,如果你的纹理压缩格式以及相关设置,和代码脚本、预设等资产相比没有那么频繁地改动,那么使用这个策略可以使你的 AssetBundles 兼容更多 Unity 版本。
并行分组策略
并行分组策略是指:将需要同时加载和使用的资产打包到一起。能够想象到的是,游戏中的一个关卡,包含了独属于这个关卡的角色、纹理、音乐等等资源,该策略就是用于打包这类资产。
注意,你需要完全确定某个 AssetBundle 中的资产,只会同该 AssetBundle 中的其他资产同时使用。如果 AssetBundle A 对 AssetBundle B 中的某个资产有依赖,那么会显著地增加加载时间。因为你在加载 AssetBundle A 的同时,会被强制加载整个 AssetBundle B。
使用 “并行分组策略” 最典型的案例,是将整个场景打包成 AssetBundle。这样的话,每个场景都应该包含了其需要的所有依赖。
总结
注意,一个项目完全能够,也应该根据你的需求,混合使用上面提到的三种策略。在不同情境下,使用最佳的资产配置策略,将极大地提高项目的效率。
例如,项目可能决定将不同平台的 UI 界面元素打包进不同的 AssetBundle,而不是将场景或者关卡中有交互的内容打包到一起。
无论你使用的是哪种策略,下面提供了一些额外的小贴士,你最好记住它们,因为这会让你更全面地了解分组打包策略:
将频繁更新的资源,与那些几乎不会更新的资源,打包进不同的 AssetBundle。
将可能会被同时加载的资源打包到一起。比如:一个模型及其纹理和动画。
如果你注意到一些 AssetBundles 中的一些对象,对另一个 AssetBundle 中的某个资产有依赖,那么应该把被依赖的资产单独提出来,打包成一个 AssetBundle。另外,如果有一些 AssetBundles 拥有相同的一组资产,那么应该将这组资产提出来,打包成一个 AssetBundle,作为共享资源包。
如果两组对象不太可能同时被加载,比如标准画质和高级画质对应的资产,确保它们有各自的 AssetBundle。
如果某个 AssetBundle 中将近 50% 的资产不会频繁地与其它资产同时加载,那么可以考虑将它们分开。
与上一条相反,如果有少量资产(比如5到10个),它们会被频繁地同时被加载,那么可以考虑将它们合并。
如果有一组对象,仅仅只是同一对象的不同版本,那么可以考虑使用 AssetBundle 变量(也就是上一节提到的 AssetBundle 名称设置旁边的变量设置下拉选项)。
如果本文对你有帮助的话,点个赞或者评论一下吧!
【Unity3D技术文档翻译】第1.2篇 为打包 AssetBundles 准备资产的更多相关文章
- 【Unity3D技术文档翻译】第1.3篇 创建 AssetBundles
上一章:[Unity3D技术文档翻译]第1.2篇 为打包 AssetBundles 准备资产 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced ...
- 【Unity3D技术文档翻译】第1.8篇 AssetBundles 问题及解决方法
上一章:[Unity3D技术文档翻译]第1.7篇 AssetBundles 补丁更新 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced Deve ...
- 【Unity3D技术文档翻译】第1.9篇 使用 Unity AssetBundle Browser tool (AssetBundle系列完结)
上一章:[Unity3D技术文档翻译]第1.8篇 AssetBundles 问题及解决方法 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced D ...
- 【Unity3D技术文档翻译】第1.7篇 AssetBundles 补丁更新
上一章:[Unity3D技术文档翻译]第1.6篇 使用 AssetBundle Manager 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced ...
- 【Unity3D技术文档翻译】第1.6篇 使用 AssetBundle Manager
上一章:[Unity3D技术文档翻译]第1.5篇 使用 AssetBundles 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced Develo ...
- 【Unity3D技术文档翻译】第1.4篇 AssetBundle 依赖关系
上一章:[Unity3D技术文档翻译]第1.3篇 创建 AssetBundles 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced Develo ...
- 【Unity3D技术文档翻译】第1.5篇 本地使用 AssetBundles
上一章:[Unity3D技术文档翻译]第1.4篇 AssetBundle 依赖关系 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced Devel ...
- 【Unity3D技术文档翻译】第1.0篇 AssetBundles
前言 "Unity圣典"是目前对官方文档翻译比较详细的,然而文档的最新更新日期是2013年,已经远远落后最新版本,参考意义有限.官方文档.脚本手册是学习Unity3D最直接有效的途 ...
- 【Unity3D技术文档翻译】第1.1篇 AssetBundle 工作流
译者前言:本章是关于从创建到加载,再到使用 AssetBundle 的整个流程的概述.阅读本章将对 AssetBundle 的工作流程有个简单而全面的了解. 本章原文所在章节:[Unity Manua ...
随机推荐
- python_如何对字典进行排序?
案例: 某班英语成绩以字典的形式存储为: {'lili':78, 'jin':50, 'liming': 30, ......} 依据成绩高低,进行学生成绩排名 如何对字典排序? 方法1: #!/us ...
- 流API--分组和分片
分组和分片 对具有相同特性的值进行分组时一个很常见的任务,我们可以直接使用groupingBy来进行分组. 当分类函数是一个predicate函数时,流会被分成2组列表,一组返回true,一组返回fa ...
- Linux中的shell到底是什么?
(曾经有一段充足的时间放在我面前,可以学linux,而我没有珍惜,等我失去的时候我才后悔莫及,人世间最痛苦的事莫过于此.) 最近,要将项目代码部署到linux环境下运行,但是对linux毫无基础,之前 ...
- 数据流(任务并行库 TPL)
TPL 数据流库向具有高吞吐量和低滞后时间的占用大量 CPU 和 I/O 操作的应用程序的并行化和消息传递提供了基础. 它还能显式控制缓存数据的方式以及在系统中移动的方式. 为了更好地了解数据流编程模 ...
- Hibernate (四)
1 懒加载 (感觉用处不是很大) 需要的时候加载,不需要的时候就不加载. 1.1 环境的搭建 hibernate.cfg.xml <?xml version='1.0' encoding='ut ...
- Docker入门之常用命令
写在前面 细数当前最流行的技术莫过于容器化和人工智能了,而容器化技术能有今天的热度,Docker可谓功不可没. 让我们一起来回顾一下Docker 是什么? 是一种虚拟化技术 能够将应用程序自动部署到容 ...
- 101490E Charles in Charge
题目连接 http://codeforces.com/gym/101490 题目大意 你有一张图,每两点之间有一定距离,计算出比最短路大x%之内的路径中最长边的最小值 分析 先跑一遍最短路,然后二分答 ...
- maps.reg
^/(.*\.miaopai.com/stream/.*\.mp4\?.*) http://$1 ^/([[:digit:]]{1,3}\.[[:digit:]]{1,3}\.[[:digit:]]{ ...
- Servlet 浅析
在我们学习Servlet之前,有必要了解一下Web容器的工作模式 我们所有的请求其实都是先到达了web容器,然后才分发给已经注册好的Servlet 请求由Servlet的service方法调用doGe ...
- 使用FileReader实现前端预览所选图片
需求描述 在浏览器环境下进开发网站(也就是B/S架构的应用),获取到当前设备上的图片后,希望可以在上传到服务器前简单预览一下图片内容. 具体实现 主要代码 html 部分 <input type ...