Para comenzar a crear un Asset Bundle, usted primero necesita seleccionar un asset desde la carpeta del proyecto que a usted le gustaría incluir en un bundle. Al final de la ventana del inspector para ese asset, hay un menú Asset Bundle. Al hacer click se va a revelar los nombres de cualquier asset bundles actualmente definidos, además de la opción de definir un nuevo bundle:
Si usted todavía no ha definido el bundle, haga click en ‘New’, e ingrese un nombre para su bundle.
Then, to add further assets to this bundle, use the menu at the bottom of the Inspector window to select an asset in the Project window and assign it to the named bundle.
Por defecto, la opción del AssetBundle para Asset es configurada a ninguna significando que el Asset no será escrito a un AssetBundle y más bien estará empaquetado con el proyecto principal en sí mismo. Utilizando este menú, usted puede crear uno o más Asset Bundles, darle nombres, y luego utilizar esto nuevos nombres de AssetBundle como el destino para el asset.
En esta foto el Asset asset ha sido agregado a un AssetBundle llamado environment/desert. Este AssetBundle puede contener otros assets que han sido previamente agregados. Los nombres de los AssetBundle siempre están en minúscula. Si usted utilizar caracteres de mayúscula en el nombre estos serán convertidos a minúscula. Utilizando una barra inclinada en el nombre del AssetBundle efectivamente crea carpetas, y el menú tendrá submenus, como el te la foto de arriba muestra.
Si usted crea AssetBundles que no tienen assets asignados a estos, entonces la opción "Remove Unused Names) puede ser utilizada. Esto va a borrar el AssetBundle vacío.
El archivo meta perteneciendo a un Asset va a tener el nombre del AssetBundle escogido escrito en él.
Los AssetBundles son exportados del editor utilizando código script. El siguiente script exporta AssetBundles:
using UnityEditor;
public class CreateAssetBundles
{
[MenuItem ("Assets/Build AssetBundles")]
static void BuildAllAssetBundles ()
{
BuildPipeline.BuildAssetBundles ("Assets/AssetBundles", BuildAssetBundleOptions.None, BuildTarget.StandaloneOSXUniversal);
}
}
Este script crea un item de menú al final del menú Assets. Cuando usted selecciona este item del menú para llamar la función y construir los AssetBundles, usted verá un dialogo de construcción con una barra de progreso. La función BuildPipeline.BuildAssetBundles crea los AssetBundles que han sito etiquetados, y los coloca a una carpeta output llamada “AssetBundles”. (Por favor tenga en cuenta que usted necesita crear la carpeta “AssetBundles” en la carpeta de su proyecto con anterioridad de correr este script.)
Cada AssetBundle que es exportado tendrá el mismo nombre creado en el menú AssetBundle. Adicionalmente, cada AssetBundle tendrá un archivo asociado con una extensión -manifest. Este archivo manifest es un archivo texto que usted puede abrir con cualquier editor de texto. Este proporciona información como el CRC del archivo y las dependencias del asset. El AssetBundle en este ejemplo de arriba tiene un archivo manifest que se ve así:
ManifestFileVersion: 0
CRC: 2422268106
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 8b6db55a2344f068cf8a9be0a662ba15
TypeTreeHash:
serializedVersion: 2
Hash: 37ad974993dbaa77485dd2a0c38f347a
HashAppended: 0
ClassTypes:
- Class: 91
Script: {instanceID: 0}
Assets:
Asset_0: Assets/Mecanim/StateMachine.controller
Dependencies: {}
Adicionalmente a estos, hay otros archivos creados: OTro AssetBundle y otro archivo manifest. Estos dos siempre son creados cuando los AssetBundles son creados. Estos son creados para cada carpeta que los AssetBundles son creados, y por lo tanto si usted siempre crea AssetBundles en el mismo lugar usted obtendrá solamente dos archivos extra. El archivo manifest adicional - en este ejemplo AssetBundles.manifest - puede ser utilizado de la misma manera que otros archivos manifest pero mostrarán información acerca de cómo los AssetBundles se relacionan y dependen de cada uno. En este caso, ya que nosotros solamente tenemos un solo AssetBundle, no tiene otras dependencias.
ManifestFileVersion: 0
AssetBundleManifest:
AssetBundleInfos:
Info_0:
Name: scene1assetbundle
Dependencies: {}
When you include shaders in your bundle, the Unity editor looks at the current scene and lightmapping settings to decide which Lightmap modes to use. This means that you need to have a configured scene open when building the bundle.
However, you can also manually specify which scene to calculate Lightmap modes from. This is necessary when building bundles from the command line.
Open the scene you would like to use. In the Graphics Settings Inspector (Edit > Project Settings > Graphics), go to Shader stripping/Lightmap modes and select Manual, then select From current scene.
El siguiente script del editor puede mostrar los nombres de AssetBundles los cuales el proceso de construcción pueden crear.
using UnityEditor;
using UnityEngine;
public class GetAssetBundleNames
{
[MenuItem ("Assets/Get AssetBundle names")]
static void GetNames ()
{
var names = AssetDatabase.GetAllAssetBundleNames();
foreach (var name in names)
Debug.Log ("AssetBundle: " + name);
}
}
Usted puede utilizar el método OnPostprocessAssetbundleNameChanged de la clase AssetPostprocessor, para obtener un callback cuando el AssetBundle, un asset es asociado con cambios.
using UnityEngine;
using UnityEditor;
public class MyPostprocessor : AssetPostprocessor {
void OnPostprocessAssetbundleNameChanged ( string path,
string previous, string next) {
Debug.Log("AB: " + path + " old: " + previous + " new: " + next);
}
}
Las Variantes de AssetBundle es una nueva características de 5.x. Estas pueden ser utilizadas para lograr un resultado similar a unos assets virtuales. Por ejemplo, usted puede configurar un AssetBundle como una variante como “MyAssets.hd” y “MyAssets.sd”. Asegúrese de que los assets coincidan exactamente. Los objetos en estas dos variantes de AssetBundles van a tener el mismo IDs internos el cual son asegurados por el pipeline de construcción de Unity. Por lo que estas dos variantes de AssetBundles van a ser cambiadas arbitrariamente con AssetBundles de diferentes extensiones de variante en tiempo de ejecución.
Cómo configurar variantes de Assetbundle:
El nombre completo de AssetBundle va a ser la combinación del nombre del AssetBundle y el nombre de la variante. Por ejemplo, si usted quiere agregar “MyAssets.hd” como un AssetBundle de variante, usted debería configurar el nombre del AssetBundle a “MyAssets” y la variante de AssetBundle a “hd”. Y el AssetBundle final es “MyAssets.hd”.
Pero si usted solamente configura el nombre del AssetBundle como “MyAssets.hd”, entonces este es solamente un AssetBundle normal que no es un AssetBundle variante. “MyAssets”+“hd” y “MyAssets.hd”+””no pueden co-existir ya que pueden llevar al mismo nombre del AssetBundle completo.
APIs más simples están disponible para construir AssetBundles, BuildPipeline.BuildAssetBundles(). Estos APIs son bastante simple, usted solamente necesita proporcionar:
Un archivo manifest es creado para cada AssetBundle que contiene la siguiente información:
Nosotros generamos un solo archivo manifest que incluye:
Solamente contiene un objeto AssetBundleManifest que tiene las siguiente APIs:
Un typetree es escrito al AssetBundle por defecto. La única excepción es Metro ya que tiene una solución de serialización diferente.