赞
踩
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包里面了!!!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。