Desament de Partides i Progrés

Slots de desament amb seccions extensibles per a l'estat de cada partida, i un agregat de progrés global a part per a tot allò que ha de sobreviure a l'esborrat d'una partida desada.

Per a què serveix aquest sistema

La majoria dels sistemes de desament a Unity barregen dues preguntes diferents: «què ha passat en aquesta partida» i «què ha desbloquejat aquest jugador al llarg del temps». El resultat són jocs on esborrar un slot s'endú assoliments que haurien d'haver sobreviscut, o comptadors de finalització encabits al mateix fitxer de desament que es reinicien amb ell.

Serenity respon les dues preguntes amb dos agregats en lloc d'un. GameSave desa l'estat de cada partida en un nombre configurable de slots, cadascun amb un document extensible que defineix el teu joc. GameProgress desa tot allò que és global i independent del slot — comptadors de finalització, extres desbloquejats — de manera que esborrar una partida desada no esborra mai el que el jugador s'ha guanyat.

El problema a Unity

Un sistema de desament improvisat tendeix a serialitzar-ho «tot» en un únic blob per slot, incloses dades que no pertanyen a aquella partida concreta. Esborrar un slot elimina llavors un progrés que hauria de ser permanent, i cada nova dada per desar — inventari, fites, percentatge de finalització — obliga a editar un serialitzador fet a mà en lloc de registrar una secció nova.

Els menús de slots que mostren etiqueta, data i percentatge de finalització solen haver de deserialitzar el fitxer complet només per llegir tres camps, i això es torna més lent a mesura que creixen les partides. I sense escriptures atòmiques, un desament interromput a mitges o una memòria cau desactualitzada després d'un reinici poden perdre en silenci el progrés més recent del jugador.

Com ho aborda Serenity

GameSave dona a cada slot un SaveDocument compost de seccions tipades. El teu joc l'estén implementant ISaveSection — SectionKey, Serialize i Deserialize — i Serenity inclou de sèrie InventorySection, MilestonesSection i CompletionSection. El percentatge de finalització i el temps de joc es promocionen a columnes consultables, de manera que un menú de slots mostra etiqueta, data i finalització sense deserialitzar el document complet. Cada escriptura és un upsert atòmic per slot amb semàntica de «l'última guanya» i reconciliació de ticks quan la memòria cau és freda, així que un desament no es perd mai en silenci després de reiniciar l'aplicació.

GameProgress és un agregat a part, d'una sola fila, exposat a través d'IGameProgressService — IncrementCompletionCount, UnlockExtra, IsExtraUnlocked, GetUnlockedExtras i un payload JSON lliure per a qualsevol altra cosa que el teu joc necessiti registrar de manera global. Persisteix al marge dels slots de desament, així que esborrar-ne un no l'afecta mai. Els desaments ràpids de Checkpoint viatgen dins del slot actiu a través de CheckpointsSection, activat per defecte i amb l'API pública de Checkpoint intacta.

Com encaixa a Serenity

Els dos agregats persisteixen a través del mateix backend estructurat intercanviable que va estrenar Leaderboard — PlayerPrefs, JSON amb LocalFile, SQLite incrustat, HTTP o una connexió directa a Postgres, MySQL o MongoDB — configurat a UnityGameSaveSettings i UnityGameProgressSettings. Triar un backend al núvol per als desaments no costa ni una línia de codi d'aplicació: és un canvi de configuració.

GameSave publica un conjunt complet de senyals — GameSavedSignal, GameLoadedSignal, SaveSlotDeletedSignal — juntament amb parells senyal/acció sense codi com RequestSaveGameSignal/SaveGameAction, RequestLoadGameSignal/LoadGameAction i ShowSaveSlotMenuSignal/ShowSaveSlotMenuAction, de manera que els menús poden demanar un desament o una càrrega sense una línia de C#. Dos assistents, Create Game Save Settings i Create Game Progress Settings, configuren slots, seccions i backend d'una sola vegada.

Flux de treball pràctic

  1. Implementa ISaveSection per a les dades pròpies que el teu joc desa per partida, a més de les seccions de sèrie InventorySection, MilestonesSection i CompletionSection.
  2. Configura el nombre de slots i el backend de persistència a UnityGameSaveSettings, o executa l'assistent Create Game Save Settings per fer-ho de manera guiada.
  3. Demana un desament o una càrrega emetent RequestSaveGameSignal o RequestLoadGameSignal — sense cridar el servei des del codi d'interfície.
  4. Construeix el menú de slots a partir de les columnes consultables d'etiqueta, data i finalització, sense deserialitzar partides completes.
  5. Configura IGameProgressService amb UnityGameProgressSettings o el seu assistent per registrar comptadors de finalització i extres desbloquejats al marge dels slots.
  6. Activa RouteCheckpointsIntoActiveSlot perquè els desaments ràpids de Checkpoint viatgin automàticament amb el slot actiu.

Què inclou

  • Agregat GameSave amb SlotCount configurable i un SaveDocument extensible per slot
  • Punt d'extensió ISaveSection, amb InventorySection, MilestonesSection i CompletionSection de sèrie
  • Percentatge de finalització i temps de joc com a columnes consultables per als menús de slots
  • Upsert atòmic per slot amb semàntica de «l'última guanya» i reconciliació de ticks amb memòria cau freda
  • Agregat GameProgress amb IGameProgressService — IncrementCompletionCount, UnlockExtra, IsExtraUnlocked, GetUnlockedExtras
  • CheckpointsSection, que encamina els desaments ràpids de Checkpoint al slot actiu, activat per defecte
  • Conjunt complet de senyals i parells senyal/acció sense codi per desar, carregar i obrir el menú de slots
  • Backend de persistència intercanviable compartit amb Leaderboard — desament al núvol sense codi addicional

Quan fer-lo servir

  • Jocs que necessiten diversos slots de desament amb inventari, fites o dades de finalització sense construir un serialitzador a mà.
  • Projectes on els desbloquejos globals o els comptadors de finalització han de sobreviure a l'esborrat d'un slot.
  • Menús de slots que mostren etiqueta, data i finalització a l'instant, sense deserialitzar cada partida desada.
  • Equips que ja fan servir Checkpoint i Persistència i volen desaments ràpids i emmagatzematge al núvol sense cablejat addicional.

Sistemes relacionats

Fes servir Serenity quan vulguis que les partides desades i el progrés permanent del jugador siguin dues responsabilitats ben separades, totes dues sobre un emmagatzematge que pots canviar sense tocar el codi del joc.

Tornar a la pàgina principal