AssetBundle

AssetBundle(Unity3D)

  • NGUI
  1. 一般NGUI的会做成预制的形式,也就是预设上关联了图集,纹理,字体,shader以及脚本,如果只是单纯的把一个预制打包成AssetBundle,会出现严重的资源重复问题.因为本身预制只是YAML格式,体积很小.所以我想把预制中资源全部提取出来.首先看体积大对象,纹理和图集还有字体.可以在打包的脚本中克隆原有的预制(保证原预制是完好的),然后去除预制中所有的资源依赖(可以写递归获取UIWidget去除引用即可).然后使用克隆出来的临时预制打包成AssetBundle,这样预制的大小几KB到几十KB.这样的预制只关联自己本身对资源私有的数据.
  1. 然后我们来处理预制中的关联信息, 一个UI预制可能包含很多Atlas,Texture,Font.可以再第一步去依赖时记录所有的资源依赖保存在文本中.
    1.AssetConfig 资源列表. {资源ID : 资源信息}
"29310":{"assetID":29310,"assetType":2,"assetName":"bg","assetMd5":"cedfc349e3955464aaf476a6c5e63686"}

2.NGUIDependency NGUI依赖信息{ 预制资源ID : {依赖信息} , {依赖信息} }

"-165308":[{"type":2,"InstanceID":29310},{"type":2,"InstanceID":29330}]

3.NGUIMap NGUI预制关联信息( 所有资源都是在AssetConfig里面 , 但是资源ID不直观, 所有用名称来关联资源ID)

"Login_Main":-165308

这样做优点在于资源和配置信息(prefab)分离,不会有资源耦合重复打包的问题.但是需要自己管理资源.

你可能感兴趣的:(AssetBundle)