内容网上搜集,旨在记录整理Unity的面试题,为面试做好准备。白底黑字看的太难受了,加点颜色。
AssetBundle基本理论
最简单的AssetBundle打包方式:
Unity需要加载模型经常 需要AssetBundle 。
在Unity中载入模型的最简单的方式就是:直接将模型文件放到工程目录下,然后拖进场景之中。
但是我们需要在程序运行时将网络或者任意目录下的模型加载到场景之中, name我们只能自己编写解析模型的脚本 。
Unity没有提供加载模型的API,或者是没有开放给用户 。。。
Unity中模型文件大多是.prefab,加载prefab的方式只有两个:
- Resource.Load,需要将 prefab 放到 Resource 目录下
- AssetDatabase.LoadAssetAtPath ,文件必须放在Assets目录下,即网络和其他文件夹下prefab无法加载
这时,assetBundle发挥除了很大用处。通过WWW加载AssetBundle。接下来的问题就是如何打包AssertBundle,利用
public static AssetBundleManifest BuildAssetBundles
(string outputPath, BuildAssetBundleOptions assetBundleOptions, BuildTarget targetPlatform);
在Editor文件夹下创建脚本,放入脚本,这时才会出现AssetBundle选项
AssetBundle功能开发好后,怎么用呢???
AssetBundle需要对资源进行分组:
按逻辑实体进行分组:
- 一个UI界面或者所有UI界面一个包(这个界面里面的贴图和布局信息一个包)
- 一个角色或者所有角色一个包(这个角色里面的模型和动画一个包)
- 所有的场景所共享的部分一个包(包括贴图和模型)
按资源类型分组:
- 所有声音资源打成一个包
- 所有shader打成一个包
- 所有模型打成一个包
- 所有材质打成一个包
按照使用分组:
- 把需要同时加载的资源或者某一时间内使用的所有资源打成一个包。
- 可以按照关卡分,一个关卡所需要的所有资源包括角色、贴图、声音等打成一个包。
- 也可以按照场景分,一个场景所需要的资源一个包。
解包:
IEnumerator LoadBundle(string url)
{
WWW www = new WWW(url);
yield return www;
if(www.error != null)
{
Debug.LogError();
yield break;
}
}
资料:
实力封装:Unity打包AssetBundle(番外篇)
http://实力封装:Unity打包AssetBundle(二)
实力封装:Unity打包AssetBundle(一)
AssetBundle资源加载框架设计
目的:
- 便于增量更新功能的实现
- 降低安装包大小,unity不支持过滤到Resources目录下的不用的文件
- 用AB包加快资源文件读取速度
生成AssetBundle文件的基本流程:
- 所有需要打包成为AB包的资源放到BundleResources目录下,按照一定规则存放
- 便利BundleResources目录,。根据一定规则,给不同的文件或者目录孵育一个AssetLabels
- 打包,输出目录为StreamingAssets
- 打包,遍历后生成的manifest信息,获取每个AB包的包名,根据依赖的AB包的HASH值,输出到一个JSON文件
资料
unity 资源加载框架设计