当前位置:   article > 正文

Unity打AssetBundle包_unity 打单个assetbundle

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
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

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

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/82172
推荐阅读
相关标签
  

闽ICP备14008679号