Workflow d'Addressables per a Unity
Asset prefetcher basat en servei amb contextos, etiquetes, polítiques de cau i tasques de prewarm per a Unity Addressables.
Per a què serveix aquest sistema
Unity Addressables resolen un problema real: els assets no haurien de viure a Resources ni en referències d'escena que retenen memòria per sempre. També porten la seva pròpia complexitat. Carregar, alliberar, fer prewarm, evictar i agrupar addressables per etiqueta són coses fàcils d'equivocar, i els bugs resultants solen ser de memòria i ordre de càrrega, que són els pitjors de depurar.
L'Asset Prefetcher de Serenity posa un servei davant de Unity Addressables. Contextos, etiquetes, polítiques i estat de cau esdevenen conceptes de primer nivell. Carregar i alliberar assets segueix un workflow en lloc d'una cadena de crides a Addressables.
El problema a Unity
Les crides directes a Addressables.LoadAssetAsync i ReleaseAsset repartides pels sistemes porten a quatre problemes comuns. Primer, les referències es filtren perquè les crides a release estan disperses. Segon, el mateix asset es carrega diverses vegades perquè diferents sistemes no es veuen entre ells. Tercer, l'eviction és a les palpentes perquè cada sistema té la seva idea de quan ja no es necessita un asset. Quart, fer prewarm d'un nivell esdevé un script a mida per escena.
Els Addressables també animen a fer servir etiquetes com a manera d'agrupar assets relacionats, però a la pràctica el projecte ha d'inventar el seu propi concepte de context, scope o sessió perquè aquesta agrupació signifiqui alguna cosa.
Com ho aborda Serenity
Serenity exposa l'asset prefetcher a través d'IAssetPrefetcherApp, IAssetPrefetcherService i IAssetPrefetcherProvider, a més d'IEvictionService per a les alliberacions. La capa de Domini modela el workflow amb entitats com PrefetchRequest, PrefetchContext, CacheItem i TargetItem, i amb value objects com AssetKey, PrefetchPolicy, PrefetchProfile, PrefetchBudget, PrefetchPriority i PrefetchStrategy.
Les operacions són casos d'ús: PrefetchAsset, PrewarmContext, ReleaseContext, UpdateTarget i QueryCacheStatus. L'aplicació també inclou PrewarmAssetsByLabelsTask per fer prewarm d'una llista d'etiquetes addressable en una sola crida. Les claus d'asset es resolen mitjançant IAssetKeyResolver, amb un PassthroughAssetKeyResolver de sèrie per al cas simple.
Com encaixa a Serenity
L'Asset Prefetcher viu al namespace Serenity.AssetPrefetcher. Les entitats i value objects de Domini descriuen el workflow. Serveis de Domini com LruCache i PrefetchQueue donen suport a la implementació. La capa d'Aplicació exposa els contractes i casos d'ús. La capa d'Infraestructura aporta la implementació Unity construïda sobre Addressables.
L'Asset Prefetcher coopera amb Game Settings a través d'IGameSettingsAssetPreloader i IGameSettingsAssetPreloadingIntegrator, així que els ajustos que depenen d'assets addressable es precarreguen amb la resta de la configuració. Coopera amb Game Mode per fer prewarm en transicions d'estat i amb l'Event Dispatcher quan el projecte decideix publicar esdeveniments de cau.
Flux de treball pràctic
- Agrupa assets relacionats a la finestra Addressables Groups fent servir etiquetes significatives.
- Descriu un prefetch context per al scope que vulguis carregar i alliberar com a unitat.
- Tria una política i un perfil de prefetch que encaixin amb la plataforma i el moment al joc.
- Crida PrewarmContext o executa PrewarmAssetsByLabelsTask per carregar els assets que necessitis.
- Fes servir PrefetchAsset per a assets individuals i UpdateTarget quan el scope canvia en temps d'execució.
- Allibera amb ReleaseContext quan el scope acaba i fes servir QueryCacheStatus per a diagnòstics.
Què inclou
- Prefetcher basat en servei IAssetPrefetcherApp, IAssetPrefetcherService i IAssetPrefetcherProvider
- Servei d'eviction IEvictionService per a alliberacions explícites
- Entitats de Domini PrefetchContext, PrefetchRequest, CacheItem i TargetItem
- Value objects AssetKey, PrefetchPolicy, PrefetchProfile, PrefetchBudget, PrefetchPriority i PrefetchStrategy
- Casos d'ús PrefetchAsset, PrewarmContext, ReleaseContext, UpdateTarget i QueryCacheStatus
- PrewarmAssetsByLabelsTask per a prewarm en bloc basat en etiquetes
- Resolució de claus d'asset mitjançant IAssetKeyResolver amb un PassthroughAssetKeyResolver de sèrie
- Integració amb la precàrrega d'assets de Game Settings i les transicions de Game Mode
Quan fer-lo servir
- Projectes que es recolzen en Unity Addressables i volen un workflow definit de càrrega i alliberament.
- Jocs que necessiten fer prewarm d'assets per etiqueta abans d'entrar en un nivell o pantalla.
- Equips que volen eviction i estat de cau observables en lloc d'endevinats.
- Bases de codi que volen que els addressables es dirigeixin des de serveis en lloc de crides directes disperses.
Sistemes relacionats
Utilitza Serenity quan vulguis un workflow d'addressables que ja coopera amb ajustos, estat de joc i menús, però que et segueix deixant mantenir els teus propis grups i etiquetes d'Addressables com a única font de veritat.
English
Español
Català