Unity 2017版本的Assetbundle(打包)
听说2017的版本的Assetbundle更新了,这次本着实验下的心态来测试下新版本的打包到底有哪些功能,大家可能知道,Unity的每次更新都是本着简化操作,简化代码的原则进行集中管理和迭代,废话不多说,来看看新版本都有哪些吧。
1:打包:新版本的打包只有一种方法:BuildPipeline.BuildAssetBundles();
方法里有2个重载:(1)BuildPipeline.BuildAssetBundles(string outpath,BuildAssetBundleOptions assetbundleOptions,BuildTarget target)
string outpath:打包后路径
BuildAssetBundleOptions:以什么方式去打包,具体可查看相对应的官方文档
BuildTarget :打包的目标平台
这种打包是将Editor符合一定条件下的所有资源进行打包
(2) BuildPipeline.BuildAssetBundles(string outpath,AssetBundle[] assetbundle,BuildAssetBundleOptions assetbundleOptions,BuildTarget target) 第二种方法里多了一个AssetBundle[] 的这个参数,这种打包是将你选择的资源进行打包。
关于这个参数我研究了一下,这个是结构体参数,你们用f12可以导过去,结构体又2个重要必须赋值的属性,assetbundle.assetNames和assetbundle.assetBundleName 。
话不多说,下面直接上代码让大家更直观的看到他们的使用方式:
/// <summary>
/// 将符合条件的全部分包打包(基本没什么卵用)
/// </summary>
///
[MenuItem("Tool/GreatBundle")]
static void GreatBundle()
{
Object[] selects = Selection.objects;
foreach (Object item in selects)
{
Debug.Log(item);
BuildPipeline.BuildAssetBundles(Application.dataPath + "/StreamingAssets/Manany", BuildAssetBundleOptions.None, BuildTarget.Android);
AssetDatabase.Refresh();//打包后刷新,不加这行代码的话要手动刷新才可以看得到打包后的Assetbundle包
}
}
/// <summary>
/// 将选定的多个游戏对象打包一个
/// </summary>
///
[MenuItem("Tool/GreatAllBundle")]
static void GreatAllBundle() {
AssetBundleBuild[] builds = new AssetBundleBuild[1];
Object[] selects = Selection.GetFiltered(typeof(Object),SelectionMode.DeepAssets);
string[] TestAsset = new string[selects.Length];
for (int i = 0; i < selects.Length; i++)
{
TestAsset[i] = AssetDatabase.GetAssetPath(selects[i]);
Debug.Log(TestAsset[i]);
}
builds[0].assetNames = TestAsset;
builds[0].assetBundleName = selects[0].name;
BuildPipeline.BuildAssetBundles(Application.dataPath + "/StreamingAssets/One",builds, BuildAssetBundleOptions.None, BuildTarget.Android);
AssetDatabase.Refresh();
}
对了,还有个换统一名字的编辑器扩展,这里也给奉上
[MenuItem("Tool/SetAssetBundleNameExtension")] //将选定的资源进行统一设置AssetBundle名
static void SetBundleName() {
Object[] selects = Selection.objects;
foreach (Object item in selects)
{
string path = AssetDatabase.GetAssetPath(item);
AssetImporter asset = AssetImporter.GetAtPath(path);
asset.assetBundleName = item.name;//设置Bundle文件的名称
asset.assetBundleVariant = "asset";//设置Bundle文件的扩展名
asset.SaveAndReimport();
}
AssetDatabase.Refresh();
}
对了,这是个编辑器扩展的工具脚本,脚本一定要放在Editor文件夹下且继承Editor,如有不懂的欢迎留言,一起研究,有错的也希望大家提下,共同进步