Preparando Assets para AssetBundles
Dependencias AssetBundle

Construyendo AssetBundles

In the documentation on the AssetBundle Workflow, we have a code sample which passes three arguments to the BuildPipeline.BuildAssetBundles function. Let’s dive a little deeper into what we’re actually saying.

Assets/AssetBundles: Este es el directorio en el que se mostrarán los AssetBundles. Puede cambiar esto a cualquier directorio de salida que desee, solo asegúrese de que la carpeta realmente exista antes de intentar una compilación.

BuildAssetBundleOptions

Hay diferentes BuildAssetBundleOptions que usted puede especificar que tienen una variedad de efectos. Mire la Referencia del Scripting API en BuildAssetBundleOptions para una tabla de todas las opciones.

Si bien puede combinar BuildAssetBundleOptions a medida que cambian y surgen las necesidades, hay tresBuildAssetBundleOptions específicas que se ocupan de la compresión de AssetBundle:

  • BuildAssetBundleOptions.None: esta opción de paquete usa compresión de formato LZMA, que es una única secuencia LZMA comprimida de archivos de datos serializados. La compresión LZMA requiere que todo el paquete se descomprima antes de ser utilizado. Esto da como resultado el tamaño de archivo más pequeño posible pero un tiempo de carga ligeramente mayor debido a la descompresión. Vale la pena señalar que al usar este BuildAssetBundleOptions, para utilizar cualquier asset del bundle , el bundle completo debe descomprimirse inicialmente.
    Una vez que se ha descomprimido el bundle , se volverá a comprimir en disco con la compresión LZ4, que no requiere que todo el bundle se descomprima antes de usar los assets del bundle. Esto se utiliza mejor cuando un bundle contiene assets de modo que usar un asset del bundle significa que todos los assetsse van a cargar. Empaquetar todos los recursos para un personaje o escena son algunos ejemplos de bundles que pueden usar esto.
    El uso de la compresión LZMA solo se recomienda para la descarga inicial de un AssetBundle desde un host externo debido al tamaño de archivo más pequeño. Una vez que se haya descargado el archivo, se almacenará en caché como un paquete comprimido LZ4.

  • BuildAssetBundleOptions.UncompressedAssetBundle: Esta opción de bundle crea los bundles de tal manera que los datos están completamente descomprimidos. La desventaja de estar sin comprimir es el mayor tamaño de descarga de archivos. Sin embargo, los tiempos de carga una vez descargados serán mucho más rápidos.

  • BuildAssetBundleOptions.ChunkBasedCompression: Esta opción del bundle utiliza un método de compresión conocido como LZ4, que da como resultado tamaños de archivo comprimido más grandes que LZMA, pero no requiere que todo el paquete se descomprima, a diferencia de LZMA, antes de que pueda ser utilizado. LZ4 usa un algoritmo basado en fragmentos que permite que el AssetBundle se cargue en trozos o “trozos”. Descomprimir un solo fragmento permite que los activos contenidos se usen incluso si los otros fragmentos del AssetBundle no se descomprimen.

El uso de ChunkBasedCompression tiene tiempos de carga comparables a los bundles sin comprimir con el beneficio adicional de reducir el tamaño en el disco.

BuildTarget (objetivo de construcción)

BuildTarget.Standalone: Aquí le estamos diciendo a la pipeline deconstrucción qué plataforma de destino vamos a utilizar con estos AssetBundles. Puede encontrar una lista de los objetivos de construcción explícitos disponibles en la Referencia de API de scripting paraBuildTarget. Sin embargo, si prefieres no codificar en su objetivo de construcción, no dude en aprovechar el EditorUserBuildSettings.activeBuildTarget, que buscará automáticamente la plataforma en la que está configurado para compilar y construirá sus AssetBundles en función de ese objetivo.

Una vez que haya configurado correctamente su script de consrucción, finalmente es hora de construir sus paquetes. Si siguió el ejemplo del script anterior, haga clic en Assets > Build AssetBundles para iniciar el proceso.

Ahora que ha creado con éxito sus AssetBundles, puede observar que su directorio AssetBundles tiene más archivos de los que esperaba originalmente. 2*(n + 1) más archivos, para ser exactos. Tomemos un minuto y repasemos exactamente lo que arroja BuildPipeline.BuildAssetBundles.

Para cada AssetBundle que usted específica en el editor, notará un archivo con el nombre de su AssetBundle y el nombre de su AssetBundle + “.manifest”.

Habrá un bundle adicional y manifest que no comparte un nombre con ningún AssetBundle que haya creado. En su lugar, lleva el nombre del directorio en el que se encuentra (donde se crearon los AssetBundles). Este es el Manifest Bundle. Discutiremos más acerca de esto y cómo usarlo en el futuro.

El Archivo AssetBundle

Este es el archivo que carece de una extensión .manifest y lo que estará cargando en tiempo de ejecución con el fin de cargar sus Assets.

El archivo AssetBundle es un archivo que contiene vario archivos interamente. La estrucctura de este archivo puede cambiar un poco dependiendo si es un AssetBundle o un AssetBundle de Escena. Esta es la estructura normal de un AssetBundle:

The Scene AssetBundle changes from normal AssetBundles in that it is optimized for stream loading of a Scene and its content. This image shows the internal structure of the scene bundle:

El Archivo Manifest

Para cada bundle generado, incluido el Manifest Bundle adicional, se genera un archivo de manifiesto asociado. El archivo de manifiesto se puede abrir con cualquier editor de texto y contiene información como datos de verificación de redundancia cíclica (CRC) y datos de dependencia para el paquete. Para los AssetBundles normales, su archivo de manifiesto tendrá el siguiente aspecto:

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: {}

Which shows the contained assets, dependencies, and other information.

The Manifest Bundle that was generated will have a manifest, but it’ll look more like this:

ManifestFileVersion: 0
AssetBundleManifest:
  AssetBundleInfos:
    Info_0:
      Name: scene1assetbundle
      Dependencies: {}

This will show how AssetBundles relate and what their dependencies are. For now, just understand that this bundle contains the AssetBundleManifest object which will be incredibly useful for figuring out which bundle dependencies to load at runtime. To learn more about how to use this bundle and the manifest object, see documentation on Using AssetBundles Natively.


• 2017–05–15 Page published with no editorial review - Leave page feedback

Preparando Assets para AssetBundles
Dependencias AssetBundle