Game Settings per a Unity
Casos d'ús get i set tipats per a ajustos bool, int, float i string, amb persistència i senyals d'actualització ja integrades.
Per a què serveix aquest sistema
Els ajustos del joc semblen enganyosament senzills. Un slider de volum, un preset de qualitat, una tria d'idioma i un toggle de gràfics no semblen gran cosa. Després el projecte creix. Els ajustos comencen a dependre uns dels altres, el codi de joc reacciona als seus canvis, la persistència ha de ser fiable entre plataformes i el menú d'ajustos esdevé una de les peces d'UI més tocades. La majoria d'equips construeix el seu sistema ad hoc, ensopega amb els mateixos problemes i intenta apedaçar-lo.
El sistema Game Settings de Serenity és la manera de la foundation de dir que els ajustos mereixen un servei real. Els valors són tipats, les lectures i escriptures passen per casos d'ús, la persistència és una preocupació separada i els canvis són observables a través de senyals.
El problema a Unity
Sense una capa d'ajustos real, els projectes tendeixen a derivar a un de dos patrons. O bé cada ajust és una clau de PlayerPrefs referenciada per string, repartida per tota la base de codi, o existeix una classe Settings estàtica pròpia que creix fins que ningú vol tocar-la. Tots dos fan difícil afegir un ajust amb seguretat, testejar la lògica d'ajustos i reaccionar a canvis des del codi de joc.
La persistència és l'altra meitat del problema. Els ajustos han de sobreviure entre sessions. Necessiten un moment definit per escriure's, un altre per restaurar-se i una manera definida de resetejar a valors per defecte. Quan aquests moments estan dispersos, els ajustos perden dades o es neguen a aplicar canvis fins a la propera arrencada.
Com ho aborda Serenity
Serenity exposa els ajustos a través d'IGameSettingsService amb els casos d'ús SetGameSettingsValue i GetGameSettingsValue. Existeixen variants tipades per a valors bool, int, float i string, tant en DTOs d'entrada com de sortida. Les actualitzacions són observables a través d'OnGameSettingsOnValueUpdatedSignal. La persistència es descriu mitjançant IGameSettingsPersistenceSettings i IGameSettingsRepository, i les intencions de resetejar i persistir són senyals de primer nivell: OnPersistGameSettingsSignal i OnResetGameSettingsToDefaultSignal.
Els valors per defecte, la persistència i qualsevol precàrrega d'assets dependents viuen darrere de les seves pròpies interfícies. El menú d'ajustos llegeix i escriu a través del servei. Altres sistemes se subscriuen a la senyal d'actualització quan necessiten reaccionar a un canvi.
Com encaixa a Serenity
Game Settings viu al namespace Serenity.GameSettings. Entitats de Domini com GameSettingsEntity i StoredSettingsPayload descriuen les dades. La capa d'Aplicació exposa el servei, els DTOs tipats i les senyals d'actualització. Els helpers de precàrrega d'assets IGameSettingsAssetPreloader i IGameSettingsAssetPreloadingIntegrator coordinen qualsevol asset addressable que depengui dels ajustos.
Game Settings connecta amb el Sound Mixer per a volums persistents per categoria, amb Localització per a l'idioma de joc i de veu actius, amb Game Mode per a canvis d'ajustos dirigits per estat, amb l'Event Dispatcher per a les senyals d'actualització i reset i amb el Sistema de Menús i el de Modals per a la pantalla d'ajustos i la seva confirmació de reset. El resultat és una capa d'ajustos que la resta de la foundation ja entén.
Flux de treball pràctic
- Configura els ajustos persistents que el teu joc exposa mitjançant una definició d'ajustos.
- Tria un backend de persistència, per exemple PlayerPrefs o emmagatzematge en fitxer, darrere d'IGameSettingsRepository.
- Llegeix valors amb GetGameSettingsValue i escriu-los amb SetGameSettingsValue.
- Subscriu-te a OnGameSettingsOnValueUpdatedSignal on necessitis reaccionar a un canvi.
- Llança OnPersistGameSettingsSignal als moments en què vulguis gravar els ajustos a emmagatzematge.
- Fes servir OnResetGameSettingsToDefaultSignal per resetejar els ajustos des d'un menú o un flux modal.
Què inclou
- Casos d'ús tipats SetGameSettingsValue i GetGameSettingsValue amb variants bool, int, float i string
- Senyal d'actualització OnGameSettingsOnValueUpdatedSignal per a sistemes reactius
- Interfície de persistència IGameSettingsRepository i ajustos IGameSettingsPersistenceSettings
- Senyals de persistir i resetejar OnPersistGameSettingsSignal i OnResetGameSettingsToDefaultSignal
- Helpers de precàrrega d'assets addressables que depenen dels ajustos
- Integració amb Sound Mixer, Localització, Game Mode i l'Event Dispatcher
- Instal·lador que registra el servei per a tot el projecte
- Separació neta entre les capes de Domini, Aplicació i Infraestructura
Quan fer-lo servir
- Projectes que exposen un menú d'ajustos real amb diverses categories.
- Jocs que necessiten que els ajustos persisteixin entre sessions i es reseteixin a valors per defecte de manera fiable.
- Equips que volen una capa d'ajustos tipada i observable en lloc de claus de PlayerPrefs soltes.
- Bases de codi que necessiten que altres sistemes reaccionin a canvis d'ajustos sense fer polling.
Sistemes relacionats
Utilitza Serenity quan vulguis una capa d'ajustos que ja coopera amb mixers, localització i menús, però que et segueix deixant triar el backend de persistència i el contracte de valors per al teu joc.
English
Español
Català