Ejecución
Persistencia del progreso
Conoce qué se guarda, cuándo se restaura, qué estados finales sobreviven entre sesiones y qué garantiza realmente Flush.
Persistencia ligera y delimitada
El Manager guarda estados terminales de Chapter y Objective, estados booleanos con nombre y la transferencia de escena. Este contrato no serializa escenas, GameObjects, Transform, inventario, salud ni datos generales. El proveedor predeterminado es PlayerPrefsProgressStore; puede sustituirse por IProgressStore antes de bloquear la configuración.
Las claves incluyen Progress Scope ID y Profile ID. El ámbito inicial procede de Application.identifier y el perfil es default. V1 no ofrece una interfaz completa de ranuras ni un inventario de contenido eliminado.
Qué se escribe y qué se restaura
| Registro | Cuándo se escribe | Restauración |
|---|---|---|
| Objective Completed | Finalización normal | Sí, sin eventos históricos |
| Objective Skipped | Condición fallida o llamada sin acciones | Sí, sin eventos históricos |
| Objective Active / Failed | Nunca | No |
| Chapter Completed | Al terminar todas las filas | Sí |
| Estado booleano true | SetProgressState(id, true) | Sí |
| Estado booleano false | Se elimina la clave | Ausente y false se leen igual |
| Transferencia | Carga con capítulo de destino | Una sola vez |
Escribir, Flush y Clear no son equivalentes
Las transiciones de objetivo y capítulo escriben de forma incremental; SetProgressState escribe o elimina una clave. No llaman automáticamente a Flush. FlushProgress() pide al proveedor que confirme lo pendiente una vez; no crea registros ni captura el mundo. Las transferencias sí se confirman antes de cargar.
ClearProgress() elimina capítulos, objetivos y estados conocidos, además de la transferencia actual, reinicia la memoria y llama una vez a Flush. Nunca utiliza PlayerPrefs.DeleteAll. Las claves de contenido que ya no existe requieren una migración propia.
Restauración y errores del proveedor
Se validan esquema, valores e ID. Si figura un Chapter completado pero hay objetivos no terminales, se conserva el registro, se avisa y se reanuda desde el primero pendiente. Las excepciones del proveedor se convierten en StoreError.
Los resultados públicos son Success, InvalidIdentifier, StoreUnavailable, StoreError, UnsupportedSchema y ManagerAlreadyInitialized. No anuncies un guardado correcto si la progresión cambió pero el resultado del almacén falló.
Prueba de aceptación de persistencia
- 1Borra el perfil y empieza un Chapter con tres filas.
- 2Completa la primera, omite la segunda mediante su condición y deja la tercera Active.
- 3Llama a FlushProgress y exige Success.
- 4Sal y vuelve a Play Mode. Completed y Skipped se restauran; Active y Failed no.
- 5Confirma que no se repiten sonidos ni eventos antiguos y que solo se inicia la fila pendiente actual.