您的位置:首页 > 移动开发 > Unity3D

unity动态加载之AssetBundle应用

2014-12-29 09:59 253 查看

前言

unity通过Assetbundle技术来解决在游戏运行中,对资源进行动态的下载和加载,开发者将游戏中所需要的各类资源打包压缩上传至网络服务器上,在运行游戏时可以从服务器上下载资源,从而实现资源的动态加载。

AssetBundle是在unity中使用的一种用于存储资源的文件格式,它可以存储任意一种unity可以识别的资源,包括二进制文件,对于AssetBundle的研究,可以学习雨松的文章:AssetBundle原理AssetBundle实战。还有这篇:链接
本文作为学习总结。

创建AssetBundle

要将物体打包成AssetBundle格式的文件,这里有个技巧,将游戏中需要加载的游戏物体,如需要很多资源,可以将其制作成prefab,将prefab打包成AssetBundle文件,这样在下载后加载游戏物体就会方便很多,创建AssetBundle需要借助editor脚本,在Asset文件下创建一个Editor文件夹,创建脚本,继承Editor,添加引用using UnityEditor;

核心方法就是BuildPipeline.BuildAssetBundle,这里是对方法的解释:链接

方法的参数中对平台的选择要注意,不同平台的AssetBundle文件是不能混用的;

创建的AssetBundle文件最好放在StreamingAssets文件夹下,因为在移动平台下只能读取这个路径;

读取AssetBundle

1 文件放在本地还是放在服务器,读取方式完全一样

2 不同平台下StreamingAssets的路径是不同的。读取的路径有区别

3 读取的方法之一是 WWW.LoadFromCacheOrDownload 加载自缓存或下载,方法解释:链接

特点是根据版本号,现在本地搜索资源,如果已经下载,就读取本地的资源,如果本地没有该版本号的资源,就从服务器下载。对于之前下载的老版本的资源,unity会自动处理掉,不用担心造成资源下载过多的问题。

4 另一种读取方法就是AssetBundle.CreatFromFile ,按照雨松大大的说法,这个方法是同步的,且ios和android平台都已经支持了,对比上一个方法,这个方法效率更高,建议使用此方法。打包资源时选择不压缩,将资源自己压缩后放到服务器上,之后下载,解压,使用AssetBundle.CreatFromFile()读取,ok~

5 打包场景时优化:烘焙场景,将多个场景中复用的物体,即公用的物体,拿出来。单独打包,在加载场景时再将之前移出来的公用物体加进来。那么如何加进来了,可以通过编写个xml,或json记录公用物体在这个场景里的坐标,加载时对号入座,具体参考: Unity3D研究院之将场景导出XML或JSON或二进制并且解析还原场景(四十二)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: