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 en el package manager que reconciliar 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 — incluyendo 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. - Encriptación AES-256 opcional. Lee encryption.md para conocer sus límites reales.
- Metadatos en texto plano (nivel, tiempo de juego, capítulo) legibles sin desencriptar el archivo, para que una pantalla de slots de guardado pueda listarlos de forma económica.
- 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.
- Variantes asíncronas para la IO de archivos.
- 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.
De cualquier forma, instala primero: 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 — 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 construir una pantalla de guardado 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 la encriptación |
| 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 |
| save-manager-window.md | La ventana del editor, sección por sección |
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 |
| 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.