unity AB打包以及加载(持续更新)

unity的加载资源的方法有很多,但是支持热更的只有一个ab加载。
趁着闲来无事,就去深入一下ab的打包。

AB打包简单的步骤就是把一个prefab的AssetBundle起一个名字(可以起中文,但是没必要)。unity AB打包以及加载(持续更新)_第1张图片
设置好之后试着Build一下(指定输出的路径必须存在,代码必须放在Editor文件夹)

   [MenuItem("Build/Windos")]
    static void f_BuilAB() {
       BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath,BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows64);
    }

进度条结束之后去指定的文件夹查看得到如下文件,其中mainfest文件是数据清单。StreamingAssets命名与out路径挂钩。unity AB打包以及加载(持续更新)_第2张图片
其中streamingAssets.manifest记录当前文件夹ab资源的信息。

现在已经得到了打包后的ab文件,接下来就是需要加载。
我用的WWW加载,也有其他方式的加载。这个就要看个人习惯,习惯用那种方式就用那种方式。

public class GloMain : MonoBehaviour
{
    private WWW Loadab;

    private void Awake()
    {
        StartCoroutine("loadWWW");
    }

    IEnumerator loadWWW() {

        Loadab = new WWW(GloData.ABAdress+ "/test1");  //GloData.ABAdress=Application.streamingAssetsPath; 路径可以根据自己需求来修改
        yield return Loadab;
        if (Loadab.error != null)
        {
            Debug.Log(Loadab.error);
        }
        else
        {
            //string[] AllName = Loadab.assetBundle.GetAllAssetNames();
            //for (int i = 0; i < AllName.Length; i++)
            //{
               // Debug.Log(AllName[i]);    --assets/deleceprelab/cube.prefab
            //}    

            GameObject oo = Loadab.assetBundle.LoadAsset<GameObject>("cube");
	        //AB Load出来的资源必须实例化一份,这样才可以去使用它
            GameObject cube =Instantiate<GameObject>(oo);

            cube.transform.parent = transform;
            cube.transform.localPosition = Vector3.zero;
            //Debug.Log(Loadab.assetBundle.);
        }
    }
}

运行后效果如图unity AB打包以及加载(持续更新)_第3张图片

你可能感兴趣的:(AB热更新)