本章原文所在章节:【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 准备资产的更多相关文章

  1. 【Unity3D技术文档翻译】第1.3篇 创建 AssetBundles

    上一章:[Unity3D技术文档翻译]第1.2篇 为打包 AssetBundles 准备资产 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced ...

  2. 【Unity3D技术文档翻译】第1.8篇 AssetBundles 问题及解决方法

    上一章:[Unity3D技术文档翻译]第1.7篇 AssetBundles 补丁更新 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced Deve ...

  3. 【Unity3D技术文档翻译】第1.9篇 使用 Unity AssetBundle Browser tool (AssetBundle系列完结)

    上一章:[Unity3D技术文档翻译]第1.8篇 AssetBundles 问题及解决方法 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced D ...

  4. 【Unity3D技术文档翻译】第1.7篇 AssetBundles 补丁更新

    上一章:[Unity3D技术文档翻译]第1.6篇 使用 AssetBundle Manager 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced ...

  5. 【Unity3D技术文档翻译】第1.6篇 使用 AssetBundle Manager

    上一章:[Unity3D技术文档翻译]第1.5篇 使用 AssetBundles 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced Develo ...

  6. 【Unity3D技术文档翻译】第1.4篇 AssetBundle 依赖关系

    上一章:[Unity3D技术文档翻译]第1.3篇 创建 AssetBundles 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced Develo ...

  7. 【Unity3D技术文档翻译】第1.5篇 本地使用 AssetBundles

    上一章:[Unity3D技术文档翻译]第1.4篇 AssetBundle 依赖关系 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced Devel ...

  8. 【Unity3D技术文档翻译】第1.0篇 AssetBundles

    前言 "Unity圣典"是目前对官方文档翻译比较详细的,然而文档的最新更新日期是2013年,已经远远落后最新版本,参考意义有限.官方文档.脚本手册是学习Unity3D最直接有效的途 ...

  9. 【Unity3D技术文档翻译】第1.1篇 AssetBundle 工作流

    译者前言:本章是关于从创建到加载,再到使用 AssetBundle 的整个流程的概述.阅读本章将对 AssetBundle 的工作流程有个简单而全面的了解. 本章原文所在章节:[Unity Manua ...

随机推荐

  1. 5分钟把任意网站变成桌面软件--windows版

    本文源自于segmentfault的一篇专栏文章:https://segmentfault.com/a/1190000012924855  只不过这篇是MAC版本的,所以我试了下windows版的: ...

  2. 微调数据库表结构,30 分钟搞定 WordPress 数据库查询缓慢问题

    同事的美女图片站,基于 WordPress 搭建的,因为数据越来越多,变得慢,我从 PHP slow log 里面看出是 WordPress 有些查询总是很慢,即使已经安装了页面缓存插件,但是由于页面 ...

  3. 解决eclipse出现This Android SDK requires Andro...date ADT to the latest version.问题

    更新完android SDK之后,eclipse出现了“This Android SDK requires Andro...date ADT to the latest version.”问题,这是因 ...

  4. java学习总结之文件操作--ByteArrayOutputStream的用法

    ByteArrayOutputStream类是在创建它的实例时,程序内部创建一个byte型别数组的缓冲区, 然后利用ByteArrayOutputStream和ByteArrayInputStream ...

  5. servlet入门学习之Web容器

    一.web服务器 web服务器(程序/软件) 即:www服务器或http服务器.提供Web信息浏览服务.它只需支持HTTP协议.HTML文档格式及URL.向浏览器提供服务的程序. 1.Web服务器是指 ...

  6. Springmvc 并发访问的线程安全性问题

    首先对于spring的IOC来说,对象是由Spring来帮我们管理,也就是在Spring启动的时候,在Spring容器中,由Spring给我们创建的,Spring会帮我们维护,一般都是单例的,也就是一 ...

  7. 使用 ServiceAnt 更好地解耦你的程序

    今天要厚着脸皮给大家推荐一个自己做的通信中间件--ServiceAnt,目前已经在我们团队的两个产品线上投入了使用. ServiceAnt是什么 它最初的定位是ESB(企业服务总线),但目前还没有达到 ...

  8. python_猜年龄

    猜年龄,有三次机会,如何做? 1. 检查 输入的数据是否合法,通过异常try来处理,并记录 输入错误次数 2. 通过累加器,判断是否猜了3次,并提示还剩余多少的机会 3. 当3次错误,跳出 #!/us ...

  9. 企业级分布式存储应用与实战-mogilefs实现

    Mogilefs是什么 MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发.Danga团队开发了包括 Memcached.Mogi ...

  10. Web Magic 简介

    WebMagic in Action Little book of WebMagic. WebMagic是我业余开发的一款简单灵活的爬虫框架.基于它你可以很容易的编写一个爬虫. 这本小书以WebMag ...