BuildAssetBundle 读一读 看看热闹

本文详细介绍了Unity3D中BuildAssetBundle的资源打包过程,包括按照资源类型打包、计算依赖项、生成AssetBundle及打包UI资源等步骤。还提到了BuildAssetBundle函数的作用和选项,以及Resources、StreamingAssets和persistentDataPath的区别和用途。资源打包旨在实现游戏资源的高效管理和更新。
摘要由CSDN通过智能技术生成

目录

打包是干什么的?

Step 1:

Step 2:

Step 3:

Step 4:

Step 5:

Step 6:

Step 7:

路径总结:

BuildAssetBundles这个函数的解释:

打包是干什么的

Unity3D开发的游戏中,无论模型,音频,还是图片等,我们都做成Prefab,然后打包成Assetbundle,方便我们后面的使用,来达到资源的更新。

 

 

====

In Our Program:

版本机上打版本的时候会build资源,同步build热更新包

 

在MLDJCommand.cs下加入了一个菜单项

 

BuildAssetBundle一共分为7个Step:

 

Step 1

按照资源类型,顺序打包,这里其实是按照资源分类分别封装函数,具体要打成多少个assetbundle,是在每一个_Internal函数内部进行控制。

一个最基本的原则:想通的资源尽可能的打包到一起,他们共用一套资源。不相同的模型尽量分开打包。

总的来说是按照文件夹来build的。

 

 

举例:

BuildModelAssetBundle("/DJMain/BundleData/Model", "BundleData/Model",

"Assets/StreamingAssets" + BundleManager.PathModelPrefab, target, modelFileEnd);

参数是路径信息,最后modelFileEnd是后缀名

比如BuildModel的时候就是loadPath = "Assets/StreamingAssets/Model"

其实就是我们要build的资源所在的Unity的原路径

 

然后通过BuildDependencyAssetBundle打带有依赖的AssetBundle包

  1. 检查路径有效性

CheckTargetPath函数中回对这个目标路径做一些格式的转换,确保路径的存在工作

 

  1. 遍历所有prefab计算依赖项

通过调用BundleMaker.cs中的GetAssetInPath函数,遍历整个文件夹,获得两个字典

一个是singlePrefabs<路径,文件名>字典 (1110个)

一个是singleObjsDic<文件名,Object>字典

第二个字典是通过Unity API AssetDatabase.LoadMainAssetAtPath获取的assets文件夹下的所有特定类型的物体

然后把这些Object放入curLoadPrefab数组,用来计算依赖项

然后通过Unity Api EditorUtility.CollectDependencies 来计算curLoadPrefab里面的所有依赖资源 dependObjs

这一步的时间还是比较长的

 

  1. 计算 共享资源包

在这些dependObjs中,对于所有的UnityEngine.Shader类型的资源,如果是在"Assets/DJMain"下面,则加入shaderDependObjs里面,用来打一个共享包

然后把CommonEffectTexture和CommonTexture所用到的texture加到shaderDependObjs里面,通过名字能看出来,这两个文件夹下的,都是“common”的

接下来把一些特殊的单个资源也加入到shaderDependObjs里面

 

  1. 整合所有要打包的资源的List并且进行打包

遍历singlePrefabs

{

         AssetBundleBuild currentBuildInfo = new AssetBundleBuild();

         每一个prefab对应一个后缀名变为".assetbundle"的AssetBundleBuild信息

         并且把这个AssetBundleBuild加入到singleBundleBuildList中

}

然后遍历shaderDependObjs,把里面的东西组成一个AssetBundleBuild commonBuildInfo

然后把上singleBundleBuildList和commonBuildInfo都加入到totalBundleBuildList中(1111个)

 

最后调用BuildPipeline.BuildAssetBundles(loadPath, totalBundleBuildList.ToArray(),

BuildAssetBundleOptions.ChunkBasedCompression, buildTarget);

 

 

通过model的例子所以可以看出来,所有的shader是一个包,每一个单独的模型的prefab是一个包

 

我们再看一个UI的例子

首先获取路径下Prefab,路径分别是UI/Prefab下面的三个子文件夹,Common | Login | Main

Common里面其实放的是LoginMain

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值