为AssetBundles准备资源

使用AssetBundles时,您可以随意将任何Asset分配给所需的任何Bundle。但是,在设置Bundles时,需要考虑一些策略。这些分组策略可以使用到任何你认为适合的特定项目中。你可以随心所欲地混合和匹配这些策略。

逻辑实体分组

逻辑实体分组是根据其所代表的项目的功能部分将资产分配给AssetBundles的。这包括诸如用户界面、人物、环境以及在整个应用程序的整个生命周期中频繁出现的其他部分。

例子

  • 把用户界面的所有纹理和布局数据打包到一起
  • 把人物角色所包含的所有的模型和动画打包到一起
  • 把多个关卡中共用的纹理和模型打包到一起

逻辑实体分组是可下载内容(DLC)的理想选择,因为以这种方式分离的所有内容,您可以对单个实体进行更改,而不需要下载其他未更改的资产。
能够正确实施这一策略的最大的窍门是,开发人员将资产分配给各自的Bundle必须熟悉项目中每个资产的使用时间和位置。

类型分组

对于此策略,您可以将相似类型的Assets(如音轨或语言本地化文件)分配给单个AssetBundle。

类型分组是构建要由多个平台使用的AssetBundles的更好策略之一。例如,如果您的音频压缩设置在Windows和Mac平台之间是相同的,您可以将所有音频数据自己打包到AssetBundles中,并重复使用这些Bundles,而着色器则倾向于使用更多的平台特定选项进行编译,因此你为Mac构建的着色器包可能不能在Windows上重复使用。此外,这种方法非常适合使你的AssetBundles与更多的Unity版本兼容,如同纹理压缩格式和设置的更改频率比你的脚本或预制体的更改频率更低。

并发内容分组(Concurrent Content Grouping)

并发内容分组是将要同时加载和使用的Assets捆绑在一起的想法。您可以将这些类型的Bundles用于基于关卡的游戏,其中每个关卡都包含完全独特的角色、纹理、音乐等。你要绝对肯定的是,包含在这些AssetBundles中一个Asset被使用的同时,其余的Assets也会被使用。对并发内容分组捆绑中的单个资产的依赖将导致加载时间的显著增加。你将因为这个单一Asset而被迫下载整个Bundle。

并发内容分组的Bundles最常用的用例是基于场景的Bundles。在此分配策略中,每个场景Bundle应该包含大部分或全部场景依赖关系。

注意,一个项目完全可以并且应该根据需要来组合这些策略。对于任何给定的场景使用最优资产分配策略可以极大地提高任何项目的效率。

例如,一个项目可能决定将其用于不同平台的用户界面(UI)元素分组到他们自己的特定于平台的UI Bundle中,但按照关卡或场景对其交互式内容进行分组。

不管你遵循什么策略,这里有一些额外的建议值得你铭记在心:

  • 将经常更新的对象拆分成AssetBundles,这些对象与很少更改的对象分开
  • 组合可能同时加载的对象。如一个模型,它的纹理和动画
  • 如果你注意到多个AssetBundles中的多个对象取决于完全不同的AssetBundle中的单个资产,请将依赖关系移动到单独的AssetBundle。如果几个AssetBundles引用了其他AssetBundles中的同一组资产,可能值得将这些依赖关系拉入共享的AssetBundle以减少重复。
  • 如果两套对象不太可能同时加载,例如标清和高清资产,请确保它们在自己的资产组合中。
  • 如果一个AssetBundle中经常有少于50%的Bundle在同一时间加载,那么可以考虑拆分该AssetBundle。
  • 如果有一些小的AssetBundles(少于5到10个资产的)经常同时被加载,可以考虑组合这些AssetBundles。
  • 如果一组对象只是同一对象的不同版本,可考虑使用AssetBundle Variants

原文链接:
Preparing Assets for AssetBundles


同系列文章

「翻译」Unity中的AssetBundle详解(一)

「翻译」Unity中的AssetBundle详解(二)

「翻译」Unity中的AssetBundle详解(三)

「翻译」Unity中的AssetBundle详解(四)


本文作者: Sheh伟伟
本文链接: http://davidsheh.github.io/2017/08/13/「翻译」Unity中的AssetBundle详解(二)/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议。转载请注明出处!

「翻译」Unity中的AssetBundle详解(二)的更多相关文章

  1. 「翻译」Unity中的AssetBundle详解(一)

    AssetBundles AssetBundle是一个存档文件,其中包含平台在运行时加载的特定资产(模型,纹理,预制,音频剪辑,甚至整个场景).AssetBundles可以表示彼此之间的依赖关系;例如 ...

  2. [翻译]Unity中的AssetBundle详解(三)

    构建AssetBundles 在AssetBundle工作流程的文档中,我们有一个示例代码,它将三个参数传递给BuildPipeline.BuildAssetBundles函数.让我们更深入地了解我们 ...

  3. 「MoreThanJava」Day 7:接口详解

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  4. python中常用模块详解二

    log模块的讲解 Python 使用logging模块记录日志涉及四个主要类,使用官方文档中的概括最为合适: logger提供了应用程序可以直接使用的接口API: handler将(logger创建的 ...

  5. 「JSOI2013」游戏中的学问

    「JSOI2013」游戏中的学问 传送门 考虑 \(\text{DP}\) 设 \(dp_{i, j}\) 表示将前 \(i\) 个人分成 \(j\) 个集合,并且第 \(i\) 个人在第 \(j\) ...

  6. MyBatis中@MapKey使用详解

    MyBatis中@MapKey使用详解我们在上一篇文章中讲到在Select返回类型中是返回Map时,是对方法中是否存在注解@MapKey,这个注解我也是第一次看到,当时我也以为是纯粹的返回单个数据对象 ...

  7. Java中日志组件详解

    avalon-logkit Java中日志组件详解 lanhy 发布于 2020-9-1 11:35 224浏览 0收藏 作为开发人员,我相信您对日志记录工具并不陌生. Java还具有功能强大且功能强 ...

  8. 【转载】C/C++中extern关键字详解

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...

  9. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

随机推荐

  1. HDU——2955Robberies(小数背包)

    Robberies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  2. [BZOJ1574] [Usaco2009 Jan]地震损坏Damage(贪心 + dfs)

    传送门 告诉你一些点不能到达1,由于是双向边,也就是1不能到达那些点 那么从1开始dfs,如果当前点能到达不能到达的点,那么当前点就是损坏的. #include <cstdio> #inc ...

  3. GTY's birthday gift【矩阵快速幂】

    题目大意:GTY的朋友ZZF的生日要来了,GTY问他的基友送什么礼物比较好,他的一个基友说送一个可重集吧!于是GTY找到了一个可重集S,GTY能使用神犇魔法k次,每次可以向可重集中加入一个数 a+b ...

  4. form表单提交file

    form表单提交文件,这毫无疑问不是个好办法.但是,存在既有意义.既然H5都还让着东西存在着,呢么必然有其意义. form表单中的input type=file这个空间,不得不说奇丑无比!问题是还不能 ...

  5. excel打乱各行的顺序,实现无序随机排列

    由于公司做活动,经常会发些激活码过来,为了让激活码能够充分使用,经常要打乱激活码的顺序,百度了下,看了下网上的介绍,还不错,挺实用,记录下来. 具体方法如下: 1.将文本里的内容复制到Excel里的任 ...

  6. ci框架——文章查看之上篇下篇

    1:从数据库查询出推荐的文章的信息,循环查出每篇推荐文章的id和title; foreach($data as $val){ $dataid[]=$val->aid; $datatitle[]= ...

  7. Ubuntu 16.04安装Mac OS 12虚拟机资源(没成功,但资源还是可以用)

    整理的Mac OS 12虚拟机资源.装虚拟机基本是按这样的套路: 1.先装VM 2.破解VM使其支持Mac OS 12,这个脚本基本是全平台支持,可以看里面的教程文档. 3.用镜像安装系统. 资源: ...

  8. 线性表的顺序存储和链式存储的实现(C)

    //线性表的顺序存储 #include <stdio.h>typedef int DataType;#define MaxSize 15//定义顺序表typedef struct { Da ...

  9. 从Nginx源代码谈大写和小写字符转化的最高效代码以及ASCII码表的科学

    说起大写和小写字母转换.大家非常easy想起系统函数是不是,差点儿全部的编程语言都提供了这样的转换函数,可是你有没有想过这背后是怎么实现的? 让你写怎么实现? 我们都知道Nginx是眼下用的最多的Ht ...

  10. INAPP

    1. Login API : 接口為您提供了我們的登入服務,可以讓使用者透過facebook帳號登入我們的服務,在您呼叫此API後,可以得到 使用者的UUID(Unique UID為使用者在平台的唯一 ...