AssetBundle(Unity3D)
- NGUI
- 一般NGUI的會做成預制的形式,也就是預設上關聯了圖集,紋理,字體,shader以及腳本,如果只是單純的把一個預制打包成AssetBundle,會出現嚴重的資源重復問題.因為本身預制只是YAML格式,體積很小.所以我想把預制中資源全部提取出來.首先看體積大對象,紋理和圖集還有字體.可以在打包的腳本中克隆原有的預制(保證原預制是完好的),然后去除預制中所有的資源依賴(可以寫遞歸獲取UIWidget去除引用即可).然后使用克隆出來的臨時預制打包成AssetBundle,這樣預制的大小幾KB到幾十KB.這樣的預制只關聯自己本身對資源私有的數據.
- 然后我們來處理預制中的關聯信息, 一個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)分離,不會有資源耦合重復打包的問題.但是需要自己管理資源.