Unity中 BundleAsset资源的打包和解析加载

对于游戏中的资源加载Unity给出几种方式,其中AssetBundle这种方式对于动态和网络在线更新来说很重要
本篇博客博主主要说明通过AssetBundle方式对资源的 打包 发布 传输 解析和加载的步骤

1. 打包

对于我们想要打包出去的资源文件有两种打包方式:
  1. 代码打包
    对于5.0版本之前的Unity 打包资源都是通过代码实现的
    例如:
 public class PutBundles : MonoBehaviour
    {

        [MenuItem("Put/MyBundles")] //在菜单中给出选项
        static void PutBundleAssetes()
        {

            //Create the array of bundle build details.
            List buildMap = new List();
            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文件夹,把我们的脚本放在文件夹的下面,不然会出现错误

  1. 编辑器打包

    在Assets文件夹下选中我们要打包的对象:
    Unity中 BundleAsset资源的打包和解析加载_第1张图片

点击出现:

Unity中 BundleAsset资源的打包和解析加载_第2张图片

我们在下面可以自定义打包后的文件名和文件类型

然后我们可以新建一个一样的脚本实现对我们的资源实现打包:

 BuildPipeline.BuildAssetBundles("Assets/MyBundles", BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);

这里就只需要短短几行代码就能搞定啦,相比旧版本的Unity,新的版本高给我们免去了选择地址的一系列复杂的操作。接着我们就可以在菜单中对资源进行打包。

打包完成之后会出现:

 ![打包后出现的资源文件](https://img-blog.csdn.net/20170317124554667?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMjQ2NjE2OTU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

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;
        }

结果图片:

Unity中 BundleAsset资源的打包和解析加载_第3张图片

你可能感兴趣的:(Unity3D)