Unity 5.x 的新版AssetBundle打包方式有了很大的变化,所以我写了个编辑器来批量修改资源依赖的AssetbundleName
[MenuItem("AssetBundle/BuildAssetBundles")]
public static void BuildAssetBundles()
{
string outputPath = "Assets/bundles";
foreach (Object o in Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets))
{
//得到指定资源路径
string path = AssetDatabase.GetAssetPath(o);
//得到指定资源的bundle名字
string abName = AssetImporter.GetAtPath(path).assetBundleName;
//得到指定资源的依赖资源路径
string[] depends=AssetDatabase.GetDependencies(path);
//修改所有依赖的bundle名
foreach (string dp in depends)
{
if (dp.EndsWith(".cs") || dp.EndsWith(".js")) continue;
AssetImporter ai = AssetImporter.GetAtPath(dp);
ai.assetBundleName = abName;
}
}
//生成bundle包的路径
if (!Directory.Exists(outputPath))
Directory.CreateDirectory(outputPath);
//把已经赋值AssetBundleName的Object全部打包到指定目录中
BuildPipeline.BuildAssetBundles(outputPath);
AssetDatabase.Refresh();
Debug.Log("Build AssetBundle Success");
}