Unity热更新专题(五)如何打包AssetBundle

 Unity热更新专题(五)如何打包AssetBundle

如何打包AssetBundle?

我看了许多博客和论坛,写得有点乱,看的也有一点迷糊。而且unity4.6和Unity5.1在打包制作AssetBundle时,有很大区别。所以还是看看原API文档吧。

===================================================================================

BuildPipeline.BuildAssetBundles

public static AssetBundleManifest BuildAssetBundles(string outputPath, BuildAssetBundleOptions assetBundleOptions = BuildAssetBundleOptions.None, BuildTarget targetPlatform = BuildTarget.WebPlayer);

该方法就是打包制作AssetBundle的方法。

(好长的方法啊······

大概看一下
参数一:输出路径
参数二:打包的选项
参数三:平台

下面具体分析一下。

参数一:路径而已。没什么可以选的。

参数二:
Unity热更新专题(五)如何打包AssetBundle_第1张图片
描述的还是挺好理解的。

参数三:
这就更好理解了,就是Unity支持的平台。


描述:

制作在Unity编辑器里指定的所有物体的AssetBundle。

补充一点:(Unity5的新化~
1、我们创建一个cube,命名为Player。
2、把Player搞成Prefab。
我们可以看到选中Prefab时,下面有这个框。
Unity热更新专题(五)如何打包AssetBundle_第2张图片

我们点击New,标记为player.AssetBundle。

好了。下面修改代码。

创建脚本ExportAssetBundles.cs,把官方API文档上的代码贴上去。

// C# Example
// Builds an asset bundle from the selected objects in the project view.
// Once compiled go to "Menu" -> "Assets" and select one of the choices
// to build the Asset Bundle

using UnityEngine;
using UnityEditor;

public class ExportAssetBundles
{
    [MenuItem("Test/Build Asset Bundles")]
    static void BuildABs() {
	// Put the bundles in a folder called "ABs" within the
	// Assets folder.
	BuildPipeline.BuildAssetBundles("Assets/ABs");
}
}

我们可以看到Unity编辑器发生了变化。


没错。工具栏上出现了我们代码中定义的东东。点击它吧~

当然,如果你的工程中没有

Assets/ABs的话,是会出错的。
Unity热更新专题(五)如何打包AssetBundle_第3张图片

创建该目录,再次点击。我们就可以看到我们想看到的了。
Unity热更新专题(五)如何打包AssetBundle_第4张图片

加载AssetBundle。很简单。
贴个示例代码吧:
using System;
using UnityEngine;
using System.Collections;

public class Load: MonoBehaviour
{
    private string BundleURL = "file:///C:/cube.assetbundle";
    private string SceneURL = "file:///C:/scene1.unity3d";

    void Start()
    {
        //BundleURL = "file//"+Application.dataPath+"/cube.assetbundle";
        Debug.Log(BundleURL);
        StartCoroutine(DownloadAssetAndScene());
    }

    IEnumerator DownloadAssetAndScene()
    {
        //下载assetbundle,加载Cube
        using (WWW asset = new WWW(BundleURL))
        {
            yield return asset;
            AssetBundle bundle = asset.assetBundle;
            Instantiate(bundle.Load("Cube"));
            bundle.Unload(false);
            yield return new WaitForSeconds(5);
        }
        //下载场景,加载场景
        using (WWW scene = new WWW(SceneURL))
        {
            yield return scene;
			AssetBundle bundle = scene.assetBundle;
            Application.LoadLevel("scene1");
        }
       
    }
}



===================================================================================
到这里吧。

你可能感兴趣的:(Unity热更新专题(五)如何打包AssetBundle)