AssetBundle使用的必要性

1. 如果所有的资源文件,全部打包到程序中,那么程序的安装包就会很大;AssetBundle 文件放在服务器上,用的时候再从服务器进行加载,所以这个包根本就不在程序当中。

2. 热更新。AssetBundle 技术,可以在用户不重装软件的情况下,做到更改程序中的一些资源,设置开发者可以实时的完成更新,应用到所有用户的客户端上,非常方便。

3. AssetBundle是一个压缩包包含模型、贴图、预制体、声音、甚至整个场景,可以在游戏运行的时候被加载。

指定资源的AssetBundle属性

1. 在Unity的Asset文件夹中选中一个资源,然后在Inspector视图下方设置AssetBundle名称。第一个选项表示该资源标记的AssetBundle名称(即该资源会打包到这个名字称的AssetBundle中)后缀为unity3d,第二个参数主要应用于在不同版本资源的使用和动态替换AssetBundle

2. AssetBundle的标记名称要小写,可以有后缀(.unity3d),Script(脚本)不能标记AssetBundle

unity读取ios沙盒 unityassetbundle_贴图

构建AssetBundle包

1. 在Assets文件的Editor文件夹(如果文件夹不存在,就创建一个)中创建一个C#脚本。创建打包脚本:在项目目录(与Asset目录同级)创建一个AssetBundle文件夹,然后将资源打包到这个文件夹下。

unity读取ios沙盒 unityassetbundle_依赖关系_02

2. 返回编辑器界面:在Assets中点击创建的打包按钮,会自动打包到定义的文件夹内。

unity读取ios沙盒 unityassetbundle_unity读取ios沙盒_03

3. BuildAssetBundleOptions选项:

unity读取ios沙盒 unityassetbundle_unity读取ios沙盒_04

 

 

 

 

 

 

 

 

 

 

 

 

 

4. BuildTarget选项:目标构建平台。AssetBundle在不同平台之间是不完全兼容的,需要单独指定,例如Android与IOS不能兼容。

5. 可以把很多的资源放到同一个包里,然后获取时通过不同的名字获取。下面是一些分组打包的策略

(1) 逻辑实体分组:

  • 一个UI界面或者所有UI界面一个包(这个界面里面的贴图和布局信息一个包)
  • 一个角色或者所有角色一个包(这个角色里面的模型和动画一个包)
  • 所有的场景所共享的部分一个包(包括贴图和模型)

(2) 按照类型分组:所有声音资源打成一个包,所有shader打成一个包,所有模型打成一个包,所有材质打成一个包

(3) 按照使用分组:把在某一时间内使用的所有资源打成一个包。可以按照关卡分,一个关卡所需要的所有资源包括角色、贴图、声音等打成一个包。也可以按照场景分,一个场景所需要的资源一个包

Unity处理Assets之间的依赖

1. 在Unity5以后,Unity会自动处理Assets之间的依赖关系,并把这种依赖关系Build到AssetBundle之中,不再需要通过PopAssetDependencies()/PushAssetDependencies()来处理依赖关系。

2. Unity通过Manifest文件向用户展示这些依赖关系,在处理Assets的依赖关系时不再需要重新打包整个依赖链。

上传AssetBundle包

1. 可以通过上传工具(如FTP)将其上传到服务器。

加载AssetBundle包和包里面的资源

 

 

 

 

 

 

 

未完待续!