beasty-save-system / reference / components.md

Componentes

Los dos MonoBehaviours del sistema de guardado. BeastySaveable marca un GameObject como parte de un guardado de escena; BeastySaveManager contiene la configuración y hace el guardado. Ambos viven en el namespace Beasty_SaveSystem.

BeastySaveable

Add Component: Beasty > Beasty Saveable. Marcado [DisallowMultipleComponent].

Marca un GameObject como parte de los guardados de escena: un id estable, más la lista de componentes cuyo estado captura SaveAll y restaura LoadAll.

Campos del inspector

CampoTipoSignificado
Save Id (id)stringIdentificador estable que indexa este objeto dentro de los archivos de guardado. Se autogenera; editable — cambiarlo deja huérfanos los datos guardados bajo el id anterior.
Saved Components (components)List<Component>Componentes de este GameObject capturados por SaveAll y restaurados por LoadAll.

El inspector personalizado muestra el Save Id con un botón New que lo regenera, y los componentes como una lista de verificación de cada componente del GameObject, cada uno etiquetado con la capa que lo convierte (dev, un id de módulo, o core). Marcar un componente sin convertidor muestra una advertencia: SaveAll fallará con TypeUnavailable.

Reset (el estado por defecto del componente, al hacer Add Component) marca el Transform.

Miembros públicos

public string Id { get; }

El id actual.

public IReadOnlyList<Component> SavedComponents { get; }

Los componentes seleccionados, con las entradas destruidas o faltantes filtradas.

public void EnsureId()

Genera un id GUID cuando el id está vacío. Un id existente nunca se sobrescribe.

public void SetId(string value)

Fija el id. Lanza ArgumentException cuando value está vacío. Así es como un objeto generado en tiempo de ejecución se empareja con sus datos entre sesiones: dale el mismo id que le diste la última vez.

Ciclo de vida

  • Se registra en OnEnable. Se desregistra en OnDestroy — no en OnDisable. Un objeto desactivado (un jefe que aún no ha aparecido, una puerta que solo existe de noche) se sigue guardando y restaurando.
  • Un asset de prefab no lleva id: se limpia en el editor, porque de lo contrario cada instancia heredaría el mismo y todas menos la primera colisionarían. Cada instancia de escena estampa el suyo propio.
  • Un objeto que instancias con Instantiate en tiempo de ejecución obtiene un id nuevo cada vez, así que su estado no puede volver a encontrarse en un guardado anterior. Usa BeastySaveManager.Register(go, "a.stable.id", components) para objetos generados dinámicamente.
  • Dos saveables con el mismo id: el segundo no se registra y se registra un error en el log. Queda fuera del guardado.

BeastySaveManager

Add Component: Beasty > Beasty Save Manager. Marcado [DisallowMultipleComponent].

El punto de entrada a nivel de escena del flujo sin código. Contiene la configuración, rastrea cada BeastySaveable registrado, y escribe un documento de grupo por guardado.

Campo del inspector

CampoTipoSignificado
Settings (settings)BeastySaveSettingsUbicación, cifrado, copias de seguridad, carga estricta y versión de datos usados por SaveAll/LoadAll.

Cada campo de BeastySaveSettings está documentado en Configuración.

Instancia y estado

public static BeastySaveManager Instance { get; }
public BeastySaveSettings Settings { get; }
public SaveResult LastSaveResult { get; }
public LoadResult LastLoadResult { get; }

Instance se asigna en OnEnable y se limpia en OnDisable. Un segundo manager en la escena registra una advertencia en el log y no toma el control. LastSaveResult y LastLoadResult guardan el resultado del SaveAll/LoadAll más reciente, para una UI que consulta en lugar de suscribirse.

public event Action<SaveResult> SaveCompleted;
public event Action<LoadResult> LoadCompleted;

Se disparan después de cada SaveAll y LoadAll con el resultado tipado.

Guardar y cargar

public void SaveAll(string slot)
public void LoadAll(string slot)

Compatibles con UnityEvent. Reciben un único string y devuelven void, así que puedes conectarlos directamente al OnClick de un Button de uGUI con el nombre del slot escrito en el inspector, sin escribir ni una línea de C#. El resultado llega a través de SaveCompleted/LoadCompleted, LastSaveResult/LastLoadResult, y el log. Consulta Guardar sin código.

public SaveResult SaveAllNow(string slot, IDictionary<string, string> meta = null)
public LoadResult LoadAllNow(string slot)

Las mismas operaciones, devolviendo el resultado tipado directamente. meta es el diccionario de texto plano que una pantalla de slots vuelve a leer con BeastySave.ReadMeta.

public void DeleteSlot(string slot)

Elimina el archivo del slot y su copia de seguridad. También compatible con UnityEvent.

El registro de saveables

public static BeastySaveable Register(GameObject target, params Component[] components)
public static BeastySaveable Register(GameObject target, string id, params Component[] components)

Añade (o reutiliza) un BeastySaveable en target, fija su selección de componentes, y lo registra. No pasar componentes mantiene la selección actual. Ambos lanzan ArgumentNullException cuando target es nulo; el segundo lanza ArgumentException cuando id está vacío.

Usa la sobrecarga con id para cualquier cosa que generes en tiempo de ejecución. Sin un id fijado, el objeto obtiene un GUID nuevo en cada Instantiate y su estado guardado nunca puede volver a encontrarse. Dale un id que sea estable entre sesiones: su punto de aparición, su celda de mapa, su clave de misión.

public static void SyncSceneSaveables()

Registra cada BeastySaveable en las escenas cargadas, incluidos los de GameObjects inactivos. Se llama automáticamente antes de cada captura y cada aplicación. Los saveables se registran desde OnEnable, que un objeto que empieza desactivado nunca ejecuta — sin esto faltarían silenciosamente del guardado.

public static void Unregister(GameObject target)
public static void UnregisterAll()

Unregister descarta un objeto. UnregisterAll vacía el registro — para cuando quieres partir de cero (intercambiar todo el mundo, un fixture de test).

Incrustar un guardado de escena en tu propio archivo

public static SaveResult CaptureGroupNode(out JsonNode node)
public static LoadResult ApplyGroupNode(JsonNode node, bool strict)

CaptureGroupNode construye el documento de grupo — exactamente lo que escribe SaveAll — como un JsonNode en memoria, para que un sistema anfitrión pueda anidar todo el estado de la escena dentro de su propio archivo de guardado. Devuelve Ok con un node nulo cuando no hay nada registrado, o un fallo tipado que nombra al componente culpable.

ApplyGroupNode aplica un node así de vuelta sobre los saveables registrados. Un node nulo o JSON-null es un éxito sin efecto. Errores: Corrupt (la forma del documento es incorrecta), TypeUnavailable, FieldMapFailed.

Ver también