Building AssetBundles
There are three class methods you can use to buildAssetBundles:
-
BuildPipeline.BuildAssetBundle
allowsyou to build AssetBundles of any type of asset. -
BuildPipeline.BuildStreamedSceneAssetB
undle isused when you want to include only scenes to be streamed and loadedas the data becomes available. -
BuildPipeline.BuildAssetBundleExplicit
AssetNames isthe same as BuildPipeline.BuildAssetBundle but has an extraparameter to specify a custom string identifier (name) for eachobject.
An example of how to build an AssetBundle
Building asset bundles is done through editor scripting. There isbasic example of this in the scripting documentation forBuildPipeline.BuildAssetBundle.
For the sake of this example, copy and paste the script from thelink above into a new C# script called ExportAssetBundles. Thisscript should be placed in a folder named Editor, so that it worksinside the Unity Editor.

Now in the

-
Build AssetBundle FromSelection - Track dependencies. This will build the currentobject into an asset bundle and include all of its dependencies.For example if you have a prefab that consists of severalhierarchical layers then it will recursively add all the childobjects and components to the asset bundle.
-
Build AssetBundle FromSelection - No dependency tracking. This is the opposite ofthe previous method and will only include the single asset you haveselected.
For this example, you should create a new prefab. First create anew Cube by going to
You should then right click the Cube prefab in the project windowand select

At this point you can move theAssetBundle
An example of how to change the properties of the assets whenbuilding an Asset Bundle
You can use
C
// Builds an asset bundle from the selected objects in the project view,
// and changes the texture format using an AssetPostprocessor.
using UnityEngine;
using UnityEditor;
public class ExportAssetBundles {
// Store current texture format for the TextureProcessor.
public static TextureImporterFormat textureFormat;
[MenuItem("Assets/Build AssetBundle From Selection - PVRTC_RGB2")]
static void ExportResourceRGB2 () {
textureFormat = TextureImporterFormat.PVRTC_RGB2;
ExportResource();
}
[MenuItem("Assets/Build AssetBundle From Selection - PVRTC_RGB4")]
static void ExportResourceRGB4 () {
textureFormat = TextureImporterFormat.PVRTC_RGB4;
ExportResource();
}
static void ExportResource () {
// Bring up save panel.
string path = EditorUtility.SaveFilePanel ("Save Resource", "", "New Resource", "unity3d");
if (path.Length != 0) {
// Build the resource file from the active selection.
Object[] selection = Selection.GetFiltered(typeof(Object), SelectionMode.DeepAssets);
foreach (object asset in selection) {
string assetPath = AssetDatabase.GetAssetPath((UnityEngine.Object) asset);
if (asset is Texture2D) {
// Force reimport thru TextureProcessor.
AssetDatabase.ImportAsset(assetPath);
}
}
BuildPipeline.BuildAssetBundle(Selection.activeObject, selection, path, BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets);
Selection.objects = selection;
}
}
}
C
// Changes the texture format when building the Asset Bundle.
using UnityEngine;
using UnityEditor;
public class TextureProcessor : AssetPostprocessor
{
void OnPreprocessTexture() {
TextureImporter importer = assetImporter as TextureImporter;
importer.textureFormat = ExportAssetBundles.textureFormat;
}
}
You can also control how the asset is imported usingthe
In a test environment, you sometimes need to test a change thatrequire AssetBundles to be rebuilt. In these cases, it is advisableto use the option
Building AssetBundles in a production enviroment
When first using AssetBundles it may seem enough to manually buildthem as seen in the previous example. But as a project grows insize and the number of assets increases doing this process by handis not efficient. A better approach is to write a function thatbuilds all of the AssetBundles for a project. You can, for example,use a text file that maps Asset files to AssetBundle files.