- Home /
How to build a single asset bundle?
Hello!
I know I can use BuildPipeline.BuildAssetBundles to build all the asset bundles in a unity project.
However, I would like to build just a single asset bundle.
BuildPipeline.BuildAssetBundles does have an overload that allows to specify which assets to build, but every attempt to use it always resulted in this error message:
Manifest AssetBundle name "testbundle" has conflict with the user predefined AssetBundle name.
I am unable to find any information about this error message and can't figure out what I did wrong.
Any help or info about this is appreciated!
Answer by adrianzarp · Sep 24, 2020 at 04:23 PM
Hi, Tom, hope you solved your issue, but for anyone else who has this problem, I found it´s because the name of the folder where you are trying to build your Asset Bundle to is the same as the Asset Bundle name. So, for instance, if you try to build it to "C://Unity/testbundle" and you name your bundle "testbundle" you will get this error.
Just change the name of the bundle or the folder.
Answer by Skyunity · Jul 13, 2021 at 04:29 AM
Since this is still a very high search result, here is some code that can selectively build asset bundles. The code sample below is only tested with a single asset bundle name passed in, but could easily be extended to support whatever bundles you choose. Source of inspiration: https://github.com/Unity-Technologies/AssetBundles-Browser/issues/119
public static void BuildAssetBundlesByName(string[] assetBundleNames, string outputPath)
{
// Argument validation
if (assetBundleNames == null || assetBundleNames.Length == 0)
{
return;
}
// Remove duplicates from the input set of asset bundle names to build.
//assetBundleNames = assetBundleNames.Distinct().ToArray();
List<AssetBundleBuild> builds = new List<AssetBundleBuild>();
foreach (string assetBundle in assetBundleNames)
{
var assetPaths = AssetDatabase.GetAssetPathsFromAssetBundle(assetBundle);
AssetBundleBuild build = new AssetBundleBuild();
build.assetBundleName = assetBundle;
build.assetNames = assetPaths;
builds.Add(build);
Debug.Log("assetBundle to build:" + build.assetBundleName);
}
BuildPipeline.BuildAssetBundles(outputPath, builds.ToArray(), BuildAssetBundleOptions.None, EditorUserBuildSettings.activeBuildTarget);
}
Your answer
Follow this Question
Related Questions
Please explain BuildPipeline.PushAssetDependencies 2 Answers
Can't load objects from asset bundle when using AssetBundle.CreateFromFile 1 Answer
Give error after exporting AssetBundle by using BuildPipeline 0 Answers
How do i define BuildPlayerOptions.assetBundleManifestPath without a custom script? 0 Answers