对于游戏中的资源加载Unity给出几种方式,其中AssetBundle这种方式对于动态和网络在线更新来说很重要
本篇博客博主主要说明通过AssetBundle方式对资源的 打包 发布 传输 解析和加载的步骤
1. 打包
对于我们想要打包出去的资源文件有两种打包方式:
- 代码打包
对于5.0版本之前的Unity 打包资源都是通过代码实现的
例如:
public class PutBundles : MonoBehaviour
{
[MenuItem("Put/MyBundles")]
static void PutBundleAssetes()
{
List<AssetBundleBuild> buildMap = new List<AssetBundleBuild>();
AssetBundleBuild build = new AssetBundleBuild();
build.assetBundleName = "picture.unity3d";
build.assetNames = new[] { "Assets/huajianghu.jpg" };
buildMap.Add(build);
BuildPipeline.BuildAssetBundles("Assets/ABs", buildMap.ToArray(), BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
}
}
需要我们准备一个打包动作的C#脚本,自己添加方法,里面主要是通过
AssetBundleBuild对象进行打包,这个相比之下比较复杂,需要我们手动添加文件的路径和打包的地方。不过需要提出一点的 我们需要在Assets文件夹下面新建一个editor文件夹,把我们的脚本放在文件夹的下面,不然会出现错误
编辑器打包
在Assets文件夹下选中我们要打包的对象:

点击出现:

我们在下面可以自定义打包后的文件名和文件类型
然后我们可以新建一个一样的脚本实现对我们的资源实现打包:
BuildPipeline.BuildAssetBundles("Assets/MyBundles", BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64)
这里就只需要短短几行代码就能搞定啦,相比旧版本的Unity,新的版本高给我们免去了选择地址的一系列复杂的操作。接着我们就可以在菜单中对资源进行打包。
打包完成之后会出现:

2. 发布
我们可以发布到我们的游戏服务器上提供远程的客户端进行下载
在这里我们只是放在本地,进行解析和加载。
3. 传输加载解析和加载
一般对资源文件的传输我们会利用协程进行下载和传输.
IEnumerator Load()
{
WWW www = new WWW("ftp://123.778.**"或者"http://www.baidu.com");
WWW www = new WWW("file://E:/Projects/Games/Resources/Assets/MyBundles/cube.unity3d");
yield return www;
AssetBundle bundle = www.assetBundle;
AssetBundleRequest request = bundle.LoadAssetAsync("Assets/Cube.prefab", typeof(GameObject));
go = Instantiate(request.asset as GameObject, new Vector3(0f, 0f, 0f), Quaternion.identity) as GameObject;
yield return request;
www.Dispose();
hadLoad = true;
}
结果图片:

|