Ab目前只接触了打包与加载这两个分支,Unload和网络加载还没接触,说一说这个脚本怎么使用
一,打包
这个Unity5.6以上版本实际上是有直接打包的工具的,名字叫AssetBundleBrowser,在资源商店里面,可以直接拖拽上去打包,我用自己的项目打包成功了,但是公司的项目失败了,目前没找到原因,猜测是资源重复的问题,或者是我忽视了某个细节。
然后就是使用脚本打包了,代码如下
using UnityEngine;
using UnityEditor;
public class Export : MonoBehaviour {
[@MenuItem("Test/BuildAssetBundles01")]
static void BuildAssetBundles()
{
//BuildPipeline.BuildAssetBundles("Assets/AssetBundles", BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows64);
AssetBundleBuild[] buildMap = new AssetBundleBuild[1];
buildMap[0].assetBundleName = "terrain";
在Project视图中,选择要打包的对象
//Object[] selects = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
//string[] resourcesAsset = new string[selects.Length];
//for (int i = 0; i < selects.Length; i++)
//{
// //获得选择 对象的路径
// resourcesAsset[i] = AssetDatabase.GetAssetPath(selects[i]);
//}
string[] resourcesAsset = new string[1];
resourcesAsset[0] = "Assets/prefab/terrain.prefab";
//resourcesAsset[1] = "Assets/cubelogic.cs";
buildMap[0].assetNames = resourcesAsset;
BuildPipeline.BuildAssetBundles("Assets/AssetBundles/Resources", buildMap, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
Debug.Log("资源处理成功");
}
}
使用注意事项:1,这个脚本是要放在Editor文件下运行的,没有的话要自己创建一个文件,注意名字别写错了,大小写要规范
2,脚本放入后会生成一个组件按钮,和Window啊,Editor在一排,点击使用生成文件
3,文件生成为两个,一个是无后缀文件,另一个是manifest记录文件之间的关系,记住他们的文件位置,后面加载的时候要用到
4,打包的之前要先设置资源的AssetName,就是Unity右下角资源的名字,统一小写,就算大写它也会改成小写
5,资源的类型要注意,一定要是prefab才可以
二,加载
void Start () {
AssetBundle abres = AssetBundle.LoadFromFile("Assets/AssetBundles/Resources/cube"); //
if (abres != null)
{
Instantiate(abres.LoadAsset("cube"));
}
string[] names = abres.GetAllAssetNames();
foreach (var elem in names)
Debug.Log("Asset name is " + elem);
Object[] objs = abres.LoadAllAssets();
foreach (var elem in objs)
Debug.Log("Obj is " + elem.name);
}
使用加载注意:1,脚本文件位置没有要求,使用时需要挂载一个空物体(不是空的也行)
2,我使用这段代码的时候实际上并没有集体加载,而是用的比较笨的方法逐个加载的,目前还在找原因,大神知道的话指导我一哈
3,abres.LoadAsset这个函数里面传的实际上是资源的AssetName,就是右下角设置的Name,不要写错