资源篇 资源打包

目的

记录打包工具开发流程,探寻最简单的打包方法。
打包的过程一般分为两步
  1. 设置标签名称也就是assetbundle的名称
  2. 使用unity的API打包

是不是很简单,是的,接下来我们来看看具体怎么实现?

先说设置Assetbundle里面的名称

打包的时候,只会打包已经设置过Assetbundle标签的资源,没有设置的会忽略,这样的话我们就能根据项目的需求,合理化的设置这一些标签了。

先看一个简单的AssetBundle(运行Tool/BuildAll可生成AssetBundle)
在这里插入图片描述
看看这样多方便啊,只要设置了,然后利用Unity打包API就能自动生成AssetBundle,很完美。

这样就完了么?

没有!

一两个资源还好说,100个呢,1000个,你一个个手动去设置?
所以我们需要自动设置标签,既然是自动设置就需要有个规则。
那么设置标签的规则又是什么?
先看一张图
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190708230123483.
希望打出来的AssetBundle的结构和BuildResource的结构保持一致。
要实现这个需求,我们只需要设置AssetBundle的名称带有路径就可以了。
我们规定,使用相对路径作为标签名,这样就会在打包的时候生成和资源目录一样的结构(上图可做对比)。
这里有一个问题,我们希望通过ui/uiprefab去加载资源,而不是uiprefab,为什么要这样呢?看带有路径的资源,能排除项目中的很多问题。所以这里我们需要保存路径对应资源名称的关系,为什么要这样?因在AssetBundle里面的资源是通过名称加载的。

    // 资源路径
    "material/testmaterial":
       	{
       		// 资源路径
       		"assetName":"material/testmaterial",
       		// 资源名
       		"assetInBundleName":"testmaterial",
       		// 所在的bundle
       		"bundleName":"material/testmaterial"
       	},

加载时我们会使用资源路径寻找AssetBundle加载(通过AssetBundles文件(打包的时候生成的)依赖加载),然后利用资源名从AssetBundle中加载资源。

现在AssetBundle的依赖文件,资源的信息文件,都有了,打包也根据文件路径打出了每个AssetBundle,这样再也不用手动设置标签了,完美!

这样就完了吗?

没有!

一个资源打一个AssetBundle是不是太浪费了?AssetBundle的粒度太小,而且一些资源间是有关系的,比如某个场景的很多资源,某个UI的很多资源,加载的时候加载多个AssetBundle没有加载一个总体的AssetBundle快,而且粒度太小也会导致频繁的加载、卸载(因为只有一个资源的话,生命周期短,很容易就结束了)。如果这些相关联的资源在一个AssetBundle里面加载就会快很多,也不容易卸载,也会好管理。所以这里我们需要有个分类的标准。
关键是这个标准怎么定?你凭感觉这些资源要打包在一起?
我们采取一种灵活的方式,使用文件标签,就是想下图一样
在这里插入图片描述
加入一个merge文件时候,这个文件夹下面的资源就会打到一起,并且以这个文件夹的名称命名。这样,不管项目的什么时期,都可通过调整文件标签的位置,将需要的资源打到一个AssetBundle里面去。
这样是不是很灵活啊,对吧。这样我们就能灵活的控制打包的粒度大小了,其实你也可以以你自己的方式,通过表格来控制,粒度的大小,不管怎么样,最终的结果肯定都是一样的。

现在我们加入了打包粒度大小的控制。

你以为这样就完了吗?

没有!

上诉我们说的功能,是每个打包都需要的一个基础过程,接下来才是为项目量身定做的部分,也是整个打包过程中,最麻烦的部分。

  1. 项目的高中低配处理方式:一般情况下我们控制最多的还是特效,在打包开始之前,将特效生成高中低三个资源,并且打包到一个AssetBundle中,后期根据选择的质量加载相应的资源。
  2. 去除UI的默认显示:UI上会有些默认的显示,比如图片,文本,等等,这些又不能直接在源文件中删除(你删掉之后,UI后面调整起来很吃力的),也不能在加载的时候显示(UI真正显示前会出现默认显示),所以我们可以在打包前,去除这些默认显示。
  3. UI的加载和图集分离:我们的目的是加载UI和加载图集是两个流程(目的是卸载UI的时候只卸载图集,Prefab不卸载),就需要将UI的图集引用断开,并且加入脚本建议联系,加载的时候根据脚本去加载。
  4. 等等…

虽然打包前的处理有些麻烦,但是这是提升打包质量和优化项目的好地方。往往打包问题多是有原因的。

现在我们处理了打包前的情况。

你以为这样就完了吗?

没有!

每次我们打多个平台的资源的时候怎么打的?一个个去手动打?对于程序员来说这不是很掉价啊?所以我们利用命令行来自动打包。
先建立一个批处理文件:
在这里插入图片描述

批处理代码:
@echo off
@set unity="F:\soft\Unity2018.3.0f2\Editor\Unity.exe"
echo command build start
%unity% -quit -batchmode -executeMethod EditorTool.BuildCommandLine -logFile D:\Editor.log -projectPath "D:\unityWork\AssetManagerFrame"
echo command build finish
pause

运行批处理文件就能自动打包了,如果出现unity未激活的情况,要么你就先登录unity去激活,要么就按照官网的方式使用命令去激活,都行!

你以为这样就完了吗?

是的,除非你评论。

资源加载地址:https://blog.csdn.net/qq_15507535/article/details/94546748
项目地址:https://github.com/xiaoyanxiansheng/AssetManagerFrame

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值