Workflow de Addressables para Unity
Asset prefetcher basado en servicio con contextos, etiquetas, políticas de caché y tareas de prewarm para Unity Addressables.
Para qué sirve este sistema
Unity Addressables resuelven un problema real: los assets no deberían vivir en Resources ni en referencias de escena que retienen memoria para siempre. También traen su propia complejidad. Cargar, liberar, hacer prewarm, evictar y agrupar addressables por etiqueta son cosas fáciles de equivocar, y los bugs resultantes suelen ser de memoria y orden de carga, que son los peores de depurar.
El Asset Prefetcher de Serenity pone un servicio delante de Unity Addressables. Contextos, etiquetas, políticas y estado de caché se vuelven conceptos de primer nivel. Cargar y liberar assets sigue un workflow en lugar de una cadena de llamadas a Addressables.
El problema en Unity
Las llamadas directas a Addressables.LoadAssetAsync y ReleaseAsset repartidas por los sistemas llevan a cuatro problemas comunes. Primero, las referencias se filtran porque las llamadas a release están dispersas. Segundo, el mismo asset se carga varias veces porque distintos sistemas no se ven entre sí. Tercero, la eviction es a tientas porque cada sistema tiene su propia idea de cuándo ya no se necesita un asset. Cuarto, hacer prewarm de un nivel se convierte en un script a medida por escena.
Los Addressables también animan a usar etiquetas como forma de agrupar assets relacionados, pero en la práctica el proyecto tiene que inventar su propio concepto de contexto, scope o sesión para que esa agrupación signifique algo.
Cómo lo aborda Serenity
Serenity expone el asset prefetcher a través de IAssetPrefetcherApp, IAssetPrefetcherService e IAssetPrefetcherProvider, además de IEvictionService para las liberaciones. La capa de Dominio modela el workflow con entidades como PrefetchRequest, PrefetchContext, CacheItem y TargetItem, y con value objects como AssetKey, PrefetchPolicy, PrefetchProfile, PrefetchBudget, PrefetchPriority y PrefetchStrategy.
Las operaciones son casos de uso: PrefetchAsset, PrewarmContext, ReleaseContext, UpdateTarget y QueryCacheStatus. La aplicación también incluye PrewarmAssetsByLabelsTask para hacer prewarm de una lista de etiquetas addressable en una sola llamada. Las claves de asset se resuelven mediante IAssetKeyResolver, con un PassthroughAssetKeyResolver de serie para el caso simple.
Cómo encaja en Serenity
El Asset Prefetcher vive en el namespace Serenity.AssetPrefetcher. Las entidades y value objects de Dominio describen el workflow. Servicios de Dominio como LruCache y PrefetchQueue respaldan la implementación. La capa de Aplicación expone los contratos y casos de uso. La capa de Infraestructura aporta la implementación Unity construida sobre Addressables.
El Asset Prefetcher coopera con Game Settings a través de IGameSettingsAssetPreloader e IGameSettingsAssetPreloadingIntegrator, así que los ajustes que dependen de assets addressable se precargan con el resto de la configuración. Coopera con Game Mode para hacer prewarm en transiciones de estado y con el Event Dispatcher cuando el proyecto decide publicar eventos de caché.
Flujo de trabajo práctico
- Agrupa assets relacionados en la ventana Addressables Groups usando etiquetas significativas.
- Describe un prefetch context para el scope que quieras cargar y liberar como una unidad.
- Elige una política y un perfil de prefetch que encajen con la plataforma y el momento en el juego.
- Llama a PrewarmContext o ejecuta PrewarmAssetsByLabelsTask para cargar los assets que necesites.
- Usa PrefetchAsset para assets individuales y UpdateTarget cuando el scope cambia en tiempo de ejecución.
- Libera con ReleaseContext cuando el scope acaba y usa QueryCacheStatus para diagnósticos.
Qué incluye
- Prefetcher basado en servicio IAssetPrefetcherApp, IAssetPrefetcherService e IAssetPrefetcherProvider
- Servicio de eviction IEvictionService para liberaciones explícitas
- Entidades de Dominio PrefetchContext, PrefetchRequest, CacheItem y TargetItem
- Value objects AssetKey, PrefetchPolicy, PrefetchProfile, PrefetchBudget, PrefetchPriority y PrefetchStrategy
- Casos de uso PrefetchAsset, PrewarmContext, ReleaseContext, UpdateTarget y QueryCacheStatus
- PrewarmAssetsByLabelsTask para prewarm en bloque basado en etiquetas
- Resolución de claves de asset mediante IAssetKeyResolver con un PassthroughAssetKeyResolver de serie
- Integración con la precarga de assets de Game Settings y las transiciones de Game Mode
Cuándo usarlo
- Proyectos que se apoyan en Unity Addressables y quieren un workflow definido de carga y liberación.
- Juegos que necesitan hacer prewarm de assets por etiqueta antes de entrar en un nivel o pantalla.
- Equipos que quieren eviction y estado de caché observables en vez de adivinados.
- Bases de código que quieren que los addressables se dirijan desde servicios en lugar de llamadas directas dispersas.
Sistemas relacionados
Usa Serenity cuando quieras un workflow de addressables que ya coopera con ajustes, estado de juego y menús, pero que te sigue dejando mantener tus propios grupos y etiquetas de Addressables como única fuente de verdad.
English
Español
Català