Direccionables: Planificación y buenas prácticas

Hoy en día, los juegos son más grandes que nunca. A medida que siguen explorando los límites del hardware de los dispositivos modernos, se hace cada vez más crítico para los desarrolladores gestionar eficientemente los contenidos en tiempo de ejecución. Y, a medida que los editores buscan optimizar las métricas de retención y monetización de sus juegos, un pequeño cliente de juego y las actualizaciones dinámicas de contenido por aire se han convertido en requisitos básicos para muchos juegos de éxito.
Unity ofrece un canal integral para ayudar a desarrolladores y editores a triunfar en el mercado actual de los videojuegos. Esa tubería comienza y termina con Addressables, un paquete de Unity que se lanzó en 2019 y ahora impulsa miles de juegos en vivo exitosos y decenas de miles más en desarrollo.
El paquete Addressables proporciona una interfaz de usuario (UI) y una API para organizar los activos de Unity que se construirán en AssetBundles y se cargarán y descargarán dinámicamente en tiempo de ejecución. Tanto si los AssetBundles se envían con su juego base como si se alojan y entregan desde una red de distribución de contenidos (CDN) remota como Cloud Content Delivery, Addressables le ayuda a cargar los activos que necesita, sólo cuando los necesita.
Aunque el sistema Addressables puede simplificar muchos aspectos de la gestión de contenidos, no es una función de "configúralo y olvídate". Las decisiones que tomes sobre cómo organizar, construir, cargar y descargar los activos direccionables tienen implicaciones significativas para el tamaño y el rendimiento de tu juego.
Esta guía explora algunos de los factores más importantes que hay que tener en cuenta para sacar el máximo partido del sistema Addressables. Al final de este blog, encontrará útiles "hojas de trucos" que ofrecen recomendaciones generales de configuración y estrategia basadas en casos de uso habituales de Addressables.
Por supuesto, la mejor estrategia dependerá del juego que estés construyendo y de tus objetivos. Trate esta guía como una referencia para ser usada junto con los materiales de Unity Learn, la documentación del Manual de Unity, y el foro impulsado por la comunidad para Addressables.
En esencia, Addressables es una herramienta para crear AssetBundles y trabajar con ellos. Antes de sumergirse en la interfaz de usuario y la API de Addressables, es importante familiarizarse con el formato de archivo AssetBundles y algunas de sus implicaciones en tiempo de ejecución.
Usted puede pensar en AssetBundles como contenedores - son archivos de almacenamiento construidos para sus plataformas de destino que pueden contener activos como modelos, texturas, prefabs, ScriptableObjects, clips de audio, e incluso escenas enteras que Unity puede cargar en tiempo de ejecución.
Una característica clave de los AssetBundles es que pueden expresar dependencias entre ellos. Por ejemplo, AssetBundle 1 puede contener un prefab que dependa de una textura en AssetBundle 2. Cuando utilice Addressables para cargar el prefab en tiempo de ejecución, el sistema Addressables cargará automáticamente AssetBundle 2 y la textura dependiente en la memoria. Y, si AssetBundle 1 tiene otro activo que depende de un activo en AssetBundle 3, AssetBundle 3 también se cargará en la memoria, y así sucesivamente.

Cuando el juego se está ejecutando, el sistema de direccionables rastrea las referencias activas de todos los activos -incluidos los activos dependientes, como la textura mencionada anteriormente- para determinar cuáles deben estar en la memoria. Un activo cargado desde un AssetBundle no puede ser liberado de la memoria hasta que tanto su recuento de referencias como todos los demás recuentos de referencias de activos en el mismo AssetBundle estén a 0. El AssetBundle en sí puede ser liberado de la memoria sólo cuando todos los recuentos de referencia de activos en el AssetBundle estén a 0.
Teniendo en cuenta esta estrecha relación entre Addressables y AssetBundles, la regla más importante a la hora de organizar el contenido de Addressables es crear AssetBundles que contengan conjuntos discretos de activos que se espera que se carguen y descarguen juntos.
La decisión más importante que probablemente tomará al utilizar Addressables es cómo organizar sus activos en grupos de Addressables. He aquí algunas preguntas a tener en cuenta:
- ¿Debería crear muchos grupos pequeños o un número menor de grupos grandes?
- Para cada grupo, ¿cuántos AssetBundles debe intentar generar (es decir, debe empaquetar los activos de ese grupo juntos, por separado o por etiqueta)?
- ¿Debe utilizar etiquetas?
- ¿Debes dar a tus grupos rutas de carga locales o remotas?
Aunque nos encantaría dar una respuesta única, la mejor estrategia de agrupación de Direccionables dependerá de varios factores específicos de tu juego.
Acuérdate: Los grupos de direccionables proporcionan la estructura organizativa de sus activos direccionables que determina cómo se incorporarán dichos activos a los AssetBundles. Así pues, la mejor estrategia organizativa será la que empaquete, cargue y descargue sus AssetBundles de la forma más eficaz en función de la estructura, los objetivos y las limitaciones propias de su juego.
Antes de empezar a organizar el contenido de sus Direccionables, asegúrese de que domina lo siguiente:
1. La estructura y la hoja de ruta de su juego
2. Los puntos fuertes y las limitaciones de la plataforma de tu juego
3. Su(s) objetivo(s) principal(es) al utilizar Direccionables para optimizar el rendimiento de su juego
A continuación abordaremos cada uno de estos factores.
El primer factor que hay que tener en cuenta es la estructura y la hoja de ruta del juego.
Por "estructura" entendemos la arquitectura real del juego. ¿Es su juego un viaje lineal para un solo jugador en el que el jugador progresará a través de un conjunto predecible de niveles o entornos? ¿Es un juego PvP multiplataforma con miles de objetos de vanidad que podrían instanciarse en momentos impredecibles? La estructura de tu juego determinará cuándo necesitarás tener assets cargados y listos para usar, y cuándo podrás descargar assets y AssetBundles de la memoria.
Recuerde, intente crear AssetBundles que contengan sólo los activos que deban cargarse juntos y puedan descargarse juntos. Si su juego es un viaje lineal con distintos puntos de ruptura, considere la posibilidad de organizar los grupos de Direccionables en subconjuntos más grandes de contenidos asociados a cada sección de su juego. De ese modo, esos activos pueden cargarse y descargarse juntos.
Si tu juego no es lineal y es más impredecible, opta por grupos más pequeños que generarán AssetBundles más pequeños, lo que te permitirá cargar y descargar de forma más dinámica. Utilice siempre nombres lógicos y significativos para sus grupos, que le ayudarán a localizar rápidamente los activos y a optimizar su diseño.
"Hoja de ruta" se refiere a cómo evolucionará tu juego con el tiempo. Una vez que el juego llegue a los jugadores, ¿permanecerá prácticamente sin cambios, aparte de ocasionales correcciones de errores o parches para equilibrar el juego? ¿O esperas añadir nuevos contenidos con regularidad sin exigir a tus jugadores que instalen una gran actualización del cliente?
Su hoja de ruta de contenidos le ayudará a definir su estrategia de agrupación. Si el contenido de su juego será autónomo y no se actualizará tras el lanzamiento, centre su estrategia de agrupación en las consideraciones estructurales comentadas anteriormente. Si su juego va a requerir actualizaciones frecuentes de contenidos, agrúpelos de forma que los jugadores puedan descargar exactamente lo que necesitan, cuando lo necesitan.
Considere la posibilidad de utilizar etiquetas para ayudar a identificar el contenido de distintos paquetes que se necesitarán juntos en tiempo de ejecución, como un conjunto de artículos cosméticos que crecerán con el tiempo a medida que su juego madure. También puedes utilizar el modo de agrupación "Agrupar por etiqueta" de la configuración de grupos para subdividir los contenidos que hayas agrupado de forma lógica.
Por ejemplo, tal vez tengas previsto lanzar un nuevo evento "Halloween 2023" con algunos objetos cosméticos para que los jugadores los consigan. Su grupo "Trajes de Halloween 2023" podría contener activos con las etiquetas "Sombreros", "Zapatos" y "Máscaras". A continuación, podría añadir una etiqueta "Halloween 2023" a todos los activos de este grupo. Si utiliza el modo de agrupación "Agrupar por etiqueta" para este grupo, se crearán tres AssetBundles en el momento de la compilación.
En tiempo de ejecución, podrías cargar todos los activos direccionables con la etiqueta "Sombreros" en la pantalla de personalización de tu personaje para asegurarte de que todos los activos con esa etiqueta se descargan, se cargan en la memoria y están listos para que los jugadores los vean. O podría cargar todos los activos direccionables con la etiqueta "Halloween 2023" en la página promocional de su evento, asegurándose de que están listos para mostrarse a sus jugadores.


Conocer a fondo la estructura y la hoja de ruta de tu juego te ayudará a tomar decisiones informadas sobre la organización de los contenidos que serán beneficiosas durante todo el ciclo de vida de tu juego.
A continuación, abordaremos los puntos fuertes y las limitaciones específicas de sus plataformas y lo que significan para su estrategia de contenidos.
El siguiente factor a tener en cuenta son los puntos fuertes y las limitaciones de las plataformas a las que se dirige la distribución. En esta sección, hemos esbozado los objetivos de plataforma comunes para los usuarios de Addressables, así como algunas consideraciones clave para cada uno.
Móvil y RV
Para las plataformas móviles y de realidad virtual, las consideraciones más importantes que hay que tener en cuenta son el tamaño de la aplicación, el tamaño del contenido incluido y las velocidades de descarga.
Para sus grupos, considere los conjuntos de contenidos que sus jugadores necesitarán inmediatamente después de la instalación (por ejemplo, para poder completar su tutorial). Asegúrate de que este contenido está organizado en grupos con rutas de carga locales para que se incluya con tu juego base. Organice el resto de contenidos en grupos con rutas de carga remotas para poder entregar estos contenidos a sus reproductores a través del aire.
Opte por una estrategia de grupo que construya AssetBundles relativamente pequeños. El equilibrio exacto dependerá de tu juego. Evite paquetes extremadamente grandes que consumirán una cantidad sustancial de memoria y serán difíciles de liberar una vez cargados. Del mismo modo, evite un gran número de paquetes diminutos que puedan crear un archivo de catálogo de Addressables muy grande que se descargará para cada actualización de contenido. Muchos paquetes pequeños también pueden influir en la velocidad a la que tus jugadores pueden descargar el contenido que necesitan, así que ten en cuenta estos pros y contras a la hora de determinar el equilibrio adecuado para tu juego.
Sobremesa y consolas
Para ordenadores de sobremesa y consolas, lo más importante es el rendimiento. En comparación con los dispositivos móviles y el hardware de RV inalámbrico, el hardware de sobremesa y consola suele tener menos limitaciones en cuanto a memoria y almacenamiento en disco. Teniendo esto en cuenta, considere una configuración de grupo que construya AssetBundles sin comprimir. Esto proporcionará el tiempo de carga más rápido posible e incluso puede proporcionar una aplicación de parches eficiente en ciertas plataformas.
Cuando desarrolles específicamente para consolas, presta mucha atención a las restricciones de caché específicas de cada plataforma que puedan aplicarse. Mientras que las plataformas móviles le permiten aprovechar el AssetBundle Cache de Unity para el contenido descargado, esta funcionalidad está deshabilitada por defecto a nivel del motor Unity para ciertas consolas y WebGL. Considera la posibilidad de actualizar tu juego base con los nuevos contenidos de esas plataformas en lugar de intentar ofrecer contenidos remotos por aire. De lo contrario, tendrá que crear su propio sistema personalizado de almacenamiento en caché de AssetBundle y determinar si su solución cumple las condiciones de servicio de esas plataformas.
Tras evaluar los puntos fuertes y las limitaciones de sus plataformas de destino, identifique uno o dos objetivos principales que intente alcanzar mediante el sistema de Direccionables. Por ejemplo: ¿Pretende principalmente reducir el tamaño del juego base, o tiene previsto ofrecer a los jugadores actualizaciones de contenido por aire? Para demostrarlo, vamos a discutir estas opciones, y más, en detalle a continuación.
Minimizar el tamaño del juego base
Si tu objetivo principal es minimizar el tamaño de tu juego base, y no estás tan preocupado por las limitaciones de memoria o las grandes descargas después de la instalación, entonces tu objetivo principal debería ser migrar tantos activos como sea posible de escenas y Recursos a uno o más grupos de Direccionables con rutas de carga remotas.
Considere la posibilidad de que las escenas de su proyecto sean direccionables y determine cuáles, si las hay, deben incluirse con la compilación del reproductor principal. En el caso de las escenas que pueden entregarse a los jugadores después de la instalación, inclúyalas en grupos con rutas de carga remotas. Incluso puedes crear un reproductor con una escena casi vacía y cargar el resto del juego dinámicamente desde ahí, como se explica en este vídeo de Open Projects Devlog.

Si haces que alguna escena sea direccionable, es mejor hacer que todas lo sean para reducir la posibilidad y el volumen de duplicación innecesaria de activos.
Para los grupos que generarán AssetBundles que se alojarán de forma remota, asegúrese de activar la caché de AssetBundle. Este ajuste garantizará que los AssetBundles descargados se almacenen en caché en los dispositivos de tus jugadores, evitando que tengan que volver a descargarlos en cada sesión.
Aunque siempre es bueno tener en cuenta las implicaciones en tiempo de ejecución de muchos paquetes pequeños frente a pocos paquetes grandes, estas consideraciones adquieren mayor relevancia cuando se tienen en cuenta otros objetivos que se puedan tener.
Entrega eficaz de contenidos remotos a los jugadores
Si su objetivo principal es la entrega eficaz de contenidos remotos, la estructura de su grupo debe reflejar cómo pretende dividir los contenidos entre "locales" (es decir, los activos incluidos en la compilación de su reproductor) y "remotos" (es decir, los activos alojados en una red externa de entrega de contenidos). De nuevo, asegúrese de activar la caché AssetBundle para almacenar en caché el contenido descargado en los dispositivos de los jugadores.
El tamaño, el número y el modo Bundle de estos grupos dependerán de cuándo prevea entregar contenidos remotos a sus jugadores y de cuánto tiempo esté dispuesto a dejarles esperar a que se completen las descargas. Por ejemplo, si la estructura de su juego permite la entrega de todo el contenido remoto poco después de que instalen el juego base, puede optar por grupos más grandes con Pack Together o Pack Together By Label, lo que dará lugar a un número reducido de descargas grandes.
Si espera entregar conjuntos más pequeños de contenidos remotos a los jugadores a lo largo de sus sesiones que interrumpan menos la experiencia, puede optar por grupos más pequeños y/o un ajuste de Modo Bundle que generará AssetBundles más pequeños que se descargarán mucho más rápidamente.
En la mayoría de los casos, para los grupos que contienen contenido remoto, considere Activado, Excluir en caché para su opción AssetBundle Comprobación de redundancia cíclica (CRC). Esto proporcionará garantías adicionales de la integridad de su contenido remoto mientras se almacena en caché en los dispositivos de los jugadores, al tiempo que evita la sobrecarga adicional de realizar un CRC para cargar contenido que ya está en los dispositivos de los jugadores.
Optimización del uso de memoria en tiempo de ejecución y del rendimiento
Si tu objetivo principal es optimizar el rendimiento del juego en tiempo de ejecución y el uso de la memoria, recuerda la regla más importante de la organización de grupos de direccionables: Los bienes que vaya a cargar y descargar al mismo tiempo deben agruparse.
En general, esto significará crear AssetBundles más pequeños. Puedes conseguirlo de varias formas, por ejemplo creando grupos más pequeños y/o evitando el modo "Empaquetar juntos" en tu configuración de grupo para grupos grandes que contengan activos que no siempre se necesitarán al mismo tiempo en tu juego.
También debe vigilar el rendimiento en tiempo de ejecución para detectar posibles problemas o áreas de optimización. Aprovecha las herramientas oficiales de Unity, como el Unity Profiler, el paquete Memory Profiler o el Visor de eventos de direccionables, que pueden ayudarte a optimizar el rendimiento de tu juego.
Esté atento al próximo Módulo Perfilador de Direccionables, que sustituirá al Visor de Eventos de Direccionables. Esta nueva herramienta proporcionará información aún más detallada sobre cómo su código está cargando y descargando activos direccionables y AssetBundles, incluyendo información detallada sobre las dependencias entre sus activos y AssetBundles.
Múltiples objetivos
Por supuesto, la mayoría de los proyectos tendrán una serie de objetivos asociados a los direccionables. En este caso, no existe un planteamiento único. Tendrás que evaluar las ventajas y desventajas descritas anteriormente y encontrar la estructura de grupo y los ajustes que mejor te permitan alcanzar el éxito que has definido.
Le recomendamos que aproveche las ventajas de Addressables Build Report y de Addressables Profiler Module, disponibles próximamente en Addressables 1.21.3. El informe de creación de Addressables le proporcionará información detallada sobre los AssetBundles que se generaron a partir de sus creaciones de Addressables, incluido el tamaño del archivo, posibles duplicados e información detallada sobre dependencias. El módulo Addressables Profiler es una nueva herramienta de análisis en tiempo de ejecución que aprovecha estos nuevos datos de dependencia, proporcionando información precisa acerca de lo que fue cargado por su código Addressables y por qué fue cargado.
A continuación le ofrecemos unas prácticas "hojas de trucos" con nuestros ajustes y estrategias recomendados para Addressables, basados en algunos de los casos de uso más comunes. Por supuesto, se trata de meras sugerencias: usted debe determinar si una sugerencia se ajusta a la estructura específica de su proyecto y a sus objetivos concretos.
- Un juego para móviles con frecuentes actualizaciones de contenido
- Un juego independiente y autónomo de sobremesa o consola
- Un juego de RV creado para Meta Quest 2
Si tiene alguna pregunta o desea obtener más información sobre el paquete Addressables, visítenos en el foro Addressables. También puedes conectar conmigo directamente en Twitter en @Unity_Jeff. Asegúrate de estar atento a los nuevos blogs técnicos de otros desarrolladores de Unity como parte de laserieTech from the Trenches.