Unity打AssetBundle包

1、首先说一下 Unity打AssetBundle包不需要任何插件,Unity带了很完整的关于打AssetBundle的API。

2、首先创建一个Unity项目,之后创建四个文件夹(Editor 和StreamingAssets 这两个文件夹是必须的)
这里写图片描述

3、创建一个脚本 (脚本名:CreateAssetBundle),这个脚本不用继承MonoBehaviour,要引入UnityEdior命名空间,把这个脚本放在Ediotr文件夹下。之后就会在Unity菜单栏中出现一个Build的文件夹。

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;

public class CreateAssetBundle  {

    [MenuItem("Bulid/BUild AssetBundles")]//编辑器菜单路径 打包
    static void BulidAllAssetBundle()
    {
#if UNITY_ANDROID//安卓端
        Debug.Log("安卓平台打包成功");
        BulidPipeline.BulidAssetBundles(Application.streamingAssetsPath,
        BulidAssetBundleOptions.UncompressedAssetBundle,
        BulidTarget.Android);
#elif UNITY_IPHONE//IOS
         Debug.Log("IOS平台打包成功");
        BulidPipeline.BulidAssetBundles(Application.streamingAssetsPath,
        BulidAssetBundleOptions.UncompressedAssetBundle,
        BulidTarget.iOS);
#elif UNITY_STANDALONE_WIN||UNITY_EDITOR//PC或则编辑器
        Debug.Log("PC平台打包成功");
        BuildPipeline.BuildAssetBundles(Application.streamingAssetsPath,
            BuildAssetBundleOptions.UncompressedAssetBundle,
            BuildTarget.StandaloneWindows);
#endif
    }
}

4、Unity面板如图
这里写图片描述

5、接下来就是打AB包了,首先我们创建一个Cube,做成预制体。然后选中预制体,在Inspector面板会出现AssetBundle的一个小界面。
这里写图片描述
6、在AssetBUndle界面添加一个AB包的名字,为Cube这个预制体添加这个名字。
这里写图片描述
7、现在我们就可以打AB包了 ,怎么打AB包呢 ,很简单!!!现在只需要点击一下菜单栏中Build–CreateAssetBundle,这就涉及到为什么我们要创建StreamingAssets文件夹了,因为生成的AB包我们放到了这个文件夹下。
这里写图片描述

这里写图片描述

8、myab那个文件就是我们打的AB包,打AB包成功后,就可以把Cube的预制体删掉了,因为我们用不到了,我们想用这个Cube的预制体的话,就直接从AB中加载就行了。

9、剩下就是我们用代码从AB包中加载Cube预制体了

using System.Collections;
using UnityEngine;
public class Load : MonoBehaviour
{
    private string pathUrl;//AB包路径

    public string abName;//AB包的名字
    public string prefabsName;//想要从AB包中加载物体的名字

    void Start()
    {
        pathUrl =
#if UNITY_ANDROID
            "jar:file://"+Application.dataPath+"!/assets/";
#elif UNITY_IPHONE
            Application.dataPath+"/Raw/";
#elif UNITY_STANDALONE_WIN||UNITY_EDITOR
           "file://" + Application.dataPath + "/StreamingAssets/";
#endif
    }
    public IEnumerator LoadAsset(string assetBundle, string resName)
    {
        string mUrl = pathUrl + assetBundle;
        WWW www = new WWW(mUrl);
        yield return www;
        if (!string.IsNullOrEmpty(www.error))
            Debug.LogError(www.error);
        else
        {
            Object obj = www.assetBundle.LoadAsset(resName);
            yield return Instantiate(obj);
            www.assetBundle.Unload(false);
        }
        www.Dispose();
    }

    private void OnGUI()
    {
        if (GUILayout.Button("LoasAsset"))
        {
            StartCoroutine(LoadAsset(abName, prefabsName));
        }
    }
}

10、把脚本挂载场景中的任何一个物体上就行。
这里写图片描述

11、下面就让我们运行程序,点击按钮,一起见证一下奇迹吧
这里写图片描述
12、现在我们的AB包也创建成功了,从AB包中把数据也拿出来了。就是这么简单。然后大家会疑惑我打了一个Cube的AB包,StreamingAssets文件夹为什么会出现两个myab文件。
一个是AB包,另一个是什么呢?
这里写图片描述

13、我们可以打开文件夹,看一下这个是什么文件
这里写图片描述
14、我们记事本打开这个文件看一下
这里写图片描述
15、这里面有一个很重要的 信息
这里写图片描述
16、这个Cube.Prefab就是我们打AB包的物体的名字,如果我们拿到一个AB包,不知道要用的物体的名字,就可以打开这个文件看看都有些什么数据打到AB包里面了!!!!!

猜你喜欢

转载自blog.csdn.net/weixin_43109909/article/details/82416473