1、为资源设置 assetBundleName 和 assetBundleVariant。

可以在资源的 Inspector 上手动设置,也可以通过 AssetImporter 进行设置。

AssetImporter importer = AssetImporter.GetAtPath(assetPath);
importer.assetBundleName = abName;
importer.assetBundleVariant = abVariant;

实际项目中,通常需要提前制定好 AssetBundle的分组策略,然后规划好 “哪些目录要做怎样的打包处理”,这样才能够批量地对项目中所有的资源设置 assetBundleName 和 assetBundleVariant。

比如:

1、某目录下的所有资源(递归至底)捆打为1个包。

2、某目录下的所有资源(递归至底)各自打为1个包。

3、某目录的下一级目录中的所有资源(递归至底)各自打为1个包。

......

2、唯一打包 API,BuildPipeline.BuildAssetBundles()

在Unity2019.2中,它有两个重载(其他API已废弃)如下:

//Build all AssetBundles specified in the editor.
//构建所有编辑器中指定了AssetBundleName的资源。(通过前期设置)
public static AssetBundleManifest BuildAssetBundles(string outputPath, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform);//Build AssetBundles from a building map.
//构建资源,通过传入的构建列表。(通过纯代码配置)
public static AssetBundleManifest BuildAssetBundles(string outputPath, AssetBundleBuild[] builds, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform);

注意:这个API在打包时,本身就是增量的(如果某个资源没有发生变化,就不会重新对该资源打包),不用自己去做增量逻辑。为什么要增量打包?因为增量打包可以大幅节省总的构建时间。

Unity 根据 已生成的、与 “XXX资源” 一一对应的 “XXX.manifest” 文件中的记录来判断资源是否发生了变化。

依据:除非删除了 “XXX.manifest”,Unity才会对 “XXX资源” 重新打包。否则就算删除了 “XXX” 的bundle文件也不会重新打包。

如果想要强制重新打包,可以在打包参数中添加 BuildAssetBundleOptions.ForceRebuildAssetBundle。

3、可选的打包参数 BuildAssetBundleOptions。

public enum BuildAssetBundleOptions
{//Build assetBundle without any special option.//不指定任何选项进行打包。//默认使用 LZMA 格式压缩。//LZMA 压缩率较大、压缩产物较小,但加载前需要完整解压,所以加载时间相对较长。//加载时,Unity 会先将 LZMA 格式的包解压,再使用 LZ4 格式重新压缩(会占用内存),最后再使用。//使用 LZMA 格式,意味着要使用包中的一个资源就得解压整个包。//用例:单个或强关联的一组资源。如,打包角色或场景的所有资源。None = 0,//Don't compress the data when creating the asset bundle.//打包时不进行数据压缩。//这使得打包和加载更快!但由于它更大,下载就需要更长的时间。//需要根据实际需求进行权衡。UncompressedAssetBundle = 1,//Includes all dependencies.//包含所有依赖。CollectDependencies = 2,//Forces inclusion of the entire asset.//强制包含整个asset。CompleteAssets = 4,//Do not include type information within the AssetBundle.//不在打包时写入TypeTree信息。//默认高版本的Unity可使用低版本Unity打包的AssetBundle。//如果开启此选项,AssetBundle会更小(优点),但也破坏了这种向下兼容性(缺点)。//NRatel建议:不要开启此选项,除非你能保证你的游戏绝不会在开发和运营过程中不更新Unity版本。DisableWriteTypeTree = 8,//Builds an asset bundle using a hash for the id of the object stored in the asset bundle.//使用存储在AssetBundle中的对象id的hash值来打包。用于增量更新,可以避免文件重命名、位置改动等操作导致的重新打包//注意: 此功能总是启用的。*(疑问?那如何关闭?)DeterministicAssetBundle = 16,//Force rebuild the assetBundles.//强制重新打包,即使原始资源没有任何改变。(反增量打包)ForceRebuildAssetBundle = 32,//Ignore the type tree changes when doing the incremental build check.//在执行增量打包检查时忽略 typeTree 的更改。//即:如果包含的asset没有改变,但是类型树改变了,那么目标AssetBundle不会被重新打包。IgnoreTypeTreeChanges = 64,//Append the hash to the assetBundle name.//将hash值附加到assetbundle名字上。可以用来解决cdn文件缓存问题AppendHashToAssetBundleName = 128,//Use chunk-based LZ4 compression when creating the AssetBundle.//在打包时使用基于块的 LZ4 压缩方式。// LZ4 压缩率较低、压缩产物较大,加载前不需要解压整个包,而是在某个资源加载时实时解压缩该资源所在的块,所以加载时间相对较短。ChunkBasedCompression = 256,//Do not allow the build to succeed if any errors are reporting during it.//如果在打包过程中报告了任何错误,都不允许打包成功。//如果没有这个标志,非致命的错误—例如为特定平台编译着色器失败—将不会导致构建失败,但是可能会在运行时导致不正确的行为。//NRatel认为:应该总是开启此选项,将所有可能出现的问题都暴露在开发阶段。StrictMode = 512,//Do a dry run build.//执行预演打包。//这不会对asset进行真实的打包,仅会返回有效的、包含依赖关系的AssetBundleManifest文件。DryRunBuild = 1024,//Disables Asset Bundle LoadAsset by file name.//禁用按 “asset文件名” 加载asset的方式。//加载AssetBundle中的asset,默认有三种方式:“完整的asset路径”、“asset文件名” 和 “带有扩展名的asset文件名”。//此选项目的:节省运行时内存和加载性能。DisableLoadAssetByFileName = 4096,//Disables Asset Bundle LoadAsset by file name with extension.//禁用按 “带有扩展名的asset文件名” 加载asset的方式。//加载AssetBundle中的asset,默认有三种方式:“完整的asset路径”、“asset文件名” 和 “带有扩展名的asset文件名”。//此选项目的:节省运行时内存和加载性能。DisableLoadAssetByFileNameWithExtension = 8192
}

4、压缩 疑问/策略?

疑问:Unity 会自动解压 LZMA格式的 AssetBundle 并重新压缩为LZ4格式。这发生在什么时候?

1、若 Caching.CompressionEnabled 为 true,LZMA 格式的 AB 将在下载时解压并使用LZ4进行缓存。

2、使用 AssetBundle.LoadFromFile 加载 LZMA 格式的 AB 时,AB将在内存中被解压。

策略:

1、打包时使用LZ4格式,不再做其他任何处理。

2、打包时使用LZ4格式,然后用自定义的压缩格式进一步压缩。

3、打包时使用非压缩格式,然后用自定义的压缩格式压缩。

5、打包产物:

(1)、目标 AssetBundle,分两种。

普通 AssetBundle 的结构(较松散):

场景 AssetBundle 的结构(它针对场景及其内容的串流加载进行了优化):

------------------------------------------------ NRatel 割 ------------------------------------------------

如果你好奇AssetBundle内部结构到底是怎样的。可以利用 WebExtract.exe 和 binary2text.exe(windows的话,都在Unity安装目录的 \Editor\Data\Tools\ 下),将 AssetBundle 解开。用法如下(在命令行下操作):

#assetbundle => binaryfile
#Scene的AB解开为 BuildPlayer-<SceneName> 和 BuildPlayer-<SceneName>.sharedAssets。
#普通的AB解开为一个 CAB-<GUIDString> 的档。
#BuildPlayer-<SceneName> 和 CAB-<GUIDString> 对应的就是 Profiler 里面 Others/SerializedFile 里面的名字。
#还有一些后缀为 .resS 的文件,应该就是实际的资源吧。
WebExtract.exe inputassetbundle    #binaryfile => textfile
binary2text.exe inputbinaryfile [outputtextfile] [-detailed] [-largebinaryhashonly] [-hexfloat]  

(2)、与目标 AssetBundle 对应的 文本格式的清单文件。

名称与 目标 AssetBundle 相同,后缀为 “.manifest” 。

它的作用有俩:1、肉眼观看 AssetBundle 包含的资源、依赖项和其他信息;2、被Unity用来做增量打包。

(3)、总的清单 AssetBundle。

一个额外生成的、名为 “AssetBundles输出根路径” 的、无后缀的、只包含了一个固定名为 “AssetBundleManifest” 的 Asset的  AssetBundle 文件。

记载了所有 AssetBundle 及其依赖关系。加载AssetBundle时,如果需要提前加载其依赖项时使用。

(4)、与总的清单 AssetBundle 对应的、文本格式的清单文件。

记载了所有 AssetBundle 及其依赖关系。肉眼观看用。

Unity资源管理——AssetBundle构建/打包相关推荐

  1. Unity资源管理--AssetBundle学习

    Unity资源目录 当用Unity创建一个工程的时候,目录如下: Assets:存放Unity工程实际的资源目录. Library:存放Unity处理完毕的资源,由unity自动转化生成. Log:存 ...

  2. Unity资源管理(四)-AssetBundle使用模式

    Unity资源管理(四)-AssetBundle使用模式 英文原文:https://unity3d.com/cn/learn/tutorials/topics/best-practices/asset ...

  3. Unity中的资源管理-AssetBundle(1)

    本文分享Unity中的资源管理-AssetBundle(1) 在上一篇文章中, 我们简单介绍了Unity中的资源和基本的使用, 今天我们详细介绍下使用AssetBundle来管理资源. AssetBu ...

  4. Unity3D资源管理——Unity2017 Assetbundle依赖打包

    Unity3D资源管理--Unity2017 Assetbundle依赖打包 http://gad.qq.com/article/detail/289272 一.运行环境 1.1编辑器版本 使用Uni ...

  5. Unity AssetBundle的打包 发布 下载与加载

    码字不易,转载请注明出处哦 https://blog.csdn.net/newchenxf/article/details/124738469 1 前文 都2022了,为什么还讨论AB包?不是有Add ...

  6. Unity中AssetBundle打包文件大致解读

    本文只讲述使用AssetBundle打包出来的几种文件信息.如果想学习怎么打包资源的话,请挪步UnityAssetBundle打包 目录 前提1:只有一个AssetBundle,打包资源数量为一个 打 ...

  7. combotree 可以异步加载吗_Unity AssetBundle 资源打包,加载,本地缓存方式,安卓,PC本地加载路径问题...

    AssetBundle的定义和作用: 1,AssetBundle是一个压缩包包含模型.贴图.预制体.声音.甚至整个场景,可以在游戏运行的时候被加载. 2,AssetBundle自身保存着互相的依赖关系 ...

  8. 设置 Nuget 本地源、在线私有源、自动构建打包

    设置 Nuget 本地源.在线私有源.自动构建打包 本文演示如果在项目中生成 Nuget 包,并添加 Nuget 本地源,不用发布到 Nuget 服务器.再附带使用在线私有源的简单方法,以及提交代码自 ...

  9. Gitlab自动触发Jenkins构建打包

    一.目的 在部门的测试环境中,开发人员一旦向gitlab仓库提交成功代码,gitlab就会自动触发jenkins构建项目.当然在构建后还可以添加项目部署或者自动化测试的脚本.这里只针对测试环境. 二. ...

最新文章

  1. kalman 滤波 演示与opencv代码
  2. ogre绘制3d图形_R语言统计与绘图:绘制饼图
  3. Python之实现一个简易计算器
  4. php redis zset 延迟队列_PHP + Redis 实现简单消息队列
  5. 【拔刀吧少年】之shell数组
  6. 为什么博图中放置按下按钮无反应_为什么点击按钮没反应呢?
  7. r语言主成分分析_PCA主成分分析
  8. 测试Spring的“会话”范围
  9. Mysql windows 安装提示MSVCR120.dll文件丢失
  10. #华为云·寻找黑马程序员#【代码重构之路】我是如何将8行代码缩减成1行的
  11. 无人车首例阵亡事件,AI教育春江水暖
  12. Vue音乐项目笔记(三)
  13. AltiumDesigner 的 PcbDoc文件转 pads 的 PCB文件
  14. JMeter下载安装
  15. 发布量子加密手机,浓眉大眼的三星也开始技术碰瓷了?
  16. 构建病毒宿主关系知识图谱
  17. 计算机桌面字体咋调整,如何调整电脑桌面字体的大小
  18. SAP UI5 在 PC 端浏览器和移动设备使用摄像头进行条形码扫描的几种解决方案介绍
  19. C# 使用openxml解析PPTX中的文本内容
  20. Spoken English-口语-发音规则

热门文章

  1. 利用渐变实现多种几何图案
  2. Java FastJson解析json字符串 提取键值
  3. 西电分布式系统考试复习
  4. Hierarchical Roofline Performance Analysis for Deep Learning Applications
  5. python 省略号 三个点“...”的含义
  6. c语言词法分析程序设计,C语言词法分析器设计与实现.doc
  7. 【PHP代码审计】TP框架初次了解学习
  8. 基于ThinkPHP+Bootstrap在线购物商城网站设计带推荐
  9. Windows 下如何使用管理员的身份运行 DOS 窗口
  10. 使用字蛛font-spider压缩font.ttf文字(思源宋体)的步骤方法