beasty-save-system / beasty-save-system.md
Beasty Save System
Beasty Save System guarda y carga los datos de tu juego como archivos JSON en disco, sin dependencias externas y sin excepciones inesperadas. Funciona de dos maneras: coloca dos componentes en una escena y conecta un botón, o llama a una API de C# de cinco líneas desde tu propio código.
Qué lo hace diferente
Cero dependencias. El paquete incluye su propio motor JSON. Sin Newtonsoft, sin los límites de JsonUtility, sin
entradas del package manager que tengas que cuadrar con el resto de tu proyecto.
Cada llamada devuelve un resultado tipado. BeastySave.Save devuelve un SaveResult. BeastySave.Load<T>
devuelve un LoadResult<T>. Nada lanza excepciones. Compruebas Success, lees el código de Error y decides
qué ve el jugador — por ejemplo, ofrecer la copia de seguridad automática cuando un archivo resulta estar corrupto.
Seguro por defecto. Los guardados se escriben de forma atómica: en un archivo temporal, que luego se
intercambia por el slot. Un cierre inesperado a mitad de la escritura no puede dejarte con un guardado a medias. El
archivo anterior se rota a .bak, y un archivo que falla su checksum nunca puede sobrescribir la última copia
buena.
Características
- Guarda cualquier objeto C# plano, o el estado de los componentes en tu escena.
- Un camino sin código:
BeastySaveManager+BeastySaveable+ un botón uGUI. - Escrituras atómicas, copias de seguridad
.bakautomáticas, checksums SHA-256 y restauración de copia de seguridad con una sola llamada. - Cifrado AES-256 opcional. Lee encryption.md para conocer sus límites reales.
- Metadatos en texto plano (nivel, tiempo de juego, capítulo) legibles sin descifrar el archivo, para que una pantalla de slots de guardado pueda listarlos a bajo costo.
- Carga estricta (todo o nada, con rollback) o tolerante (omitir y advertir).
- Versionado de datos con migraciones registradas, para que una actualización pueda leer los guardados que tus jugadores ya tienen.
- Backends de almacenamiento conectables: archivos locales por defecto, o Firebase Firestore / Realtime Database en la nube — más una interfaz para escribir el tuyo.
- JSON sin archivos: produce y carga el sobre de guardado completo como una cadena, para tu propio servidor o endpoint.
- Variantes asíncronas para la IO de archivos, y cobertura asíncrona completa para los backends en la nube.
- Siete módulos convertidores opcionales (Animation, Audio, Particles, Physics2D, Physics3D, TMPro, UGUI), cada uno de los cuales compila solo cuando el módulo de Unity correspondiente está en el proyecto.
- Una ventana de editor que lista los saveables en tu escena y los archivos de guardado en disco.
- Unity 6000.2+, Mono e IL2CPP. WebGL no está soportado.
Por dónde empezar
Si no escribes C#, ve a save-without-code.md. Te lleva desde una escena vacía hasta un guardado y una carga funcionando, solo con clics.
Si sí escribes C#, ve a save-with-code.md. Cinco minutos, una clase de datos y un archivo de guardado en disco.
En cualquiera de los dos casos, primero instala: installation.md.
La única página que todos deberían leer
what-gets-saved.md. Te dice qué tipos se guardan y recuperan correctamente y — lo más importante — que las referencias a objetos de Unity (un sprite, un prefab, otro componente) no se guardan. Eso es deliberado, y hay una forma correcta de trabajar con ello. Leer esa página antes de armar una pantalla de guardado bien vale los diez minutos.
Guías
Escritas para cualquiera, con o sin código.
| Página | Qué cubre |
|---|---|
| what-gets-saved.md | Tipos soportados, qué no se guarda, los errores que hacen fallar un guardado |
| settings.md | Cada campo de BeastySaveSettings y cuándo cambiarlo |
| scene-state.md | BeastySaveable, BeastySaveManager, ids, objetos generados en tiempo de ejecución |
| slots-and-metadata.md | Slots, cómo listarlos y cómo construir una pantalla de slots de guardado |
| backups-and-corruption.md | Escrituras atómicas, archivos .bak, restaurar uno |
| encryption.md | AES, y qué protege y qué no protege el cifrado |
| strict-vs-tolerant.md | Los dos modos de carga |
| versioning-and-migrations.md | Publicar una actualización que lee guardados antiguos |
| async-saving.md | Qué hacen realmente los métodos asíncronos |
| storage-backends.md | A dónde van los guardados: archivos locales, la nube y guardados por usuario |
| firebase.md | Guardados en la nube con Firebase: Firestore y Realtime Database |
| save-manager-window.md | La ventana del editor, sección por sección |
| logging.md | El interruptor Logging, qué imprime cada modo, y cómo mandar los logs a otro sitio |
Referencia
Firmas exactas, comportamiento exacto.
| Página | Qué cubre |
|---|---|
| api-beastysave.md | Cada método de la fachada BeastySave |
| results-and-errors.md | SaveResult, LoadResult<T>, los códigos de error |
| components.md | BeastySaveable y BeastySaveManager, campo por campo |
| converter-modules.md | Los siete módulos y exactamente qué guarda cada uno |
| save-file-format.md | El sobre (envelope), el formato de grupo, los pipelines |
| json-engine.md | JsonNode, JsonMapper, JsonParser, JsonWriter |
Avanzado
| Página | Qué cubre |
|---|---|
| custom-converters.md | Enseñar al sistema a guardar tus propios tipos |
| custom-backends.md | Escribir tu propio backend de almacenamiento |
| platforms-and-limits.md | Versiones de Unity, IL2CPP, WebGL, rendimiento |
Cuando algo sale mal
troubleshooting.md relaciona un síntoma con una causa y con una solución. faq.md responde las preguntas que surgen con más frecuencia.