Demo
DebugDemo
Inspecciona los ID del capítulo y el objetivo, sus cambios de estado, los fallos y las transiciones mientras pruebas una integración.
Observar la API sin modificarla
DebugDemo es un patrón de desarrollo para registrar Ready, ID actuales, transición y fallo tipado. Permite distinguir entre «la señal externa no llegó» y «se rechazó por ID o momento incorrecto».
El observador no debe completar, seleccionar ni cargar desde sus receptores de eventos. Así el diagnóstico no cambia el problema.
Señales y propiedades
| Origen | Registrar | Interpretación |
|---|---|---|
| OnManagerReady | ID y estados actuales | Selección inicial intentada |
| ObjectiveCompleted | Chapter e índice | Antes de acciones finales |
| ChapterFailed | Chapter, Objective y Reason | Fallo aceptado |
| OnBeforeSceneLoad | IsTransitioning | Carga aceptada inminente |
| Lectura puntual | Flags e ID | Estado, no historial |
Utilizar el observador en una integración
- 1Añádelo a un GameObject exclusivo de Demo/desarrollo.
- 2Ejecuta la acción externa y registra el estado antes de recibir su notificación.
- 3Comprueba el resultado; si es false, compara ID esperado y actual.
- 4Prueba una repetición y una descarga de escena sin listeners duplicados.
- 5Desactiva el diagnóstico en producción.
Límites del diagnóstico
- El log no prueba que las físicas o el complemento emitan; instrumenta también el origen.
- La restauración no produce historial.
- OnBeforeSceneLoad no incluye el destino.
- OnCompleted puede observar la fila siguiente.
- Registrar cada frame altera medidas y genera asignaciones.
El ejemplo compilado inferior muestra una suscripción limpia solo con API pública.
Crear un observador de diagnóstico con la API pública
- Dónde colocarlo
- Utilízalo únicamente en un GameObject de diagnóstico de la Demo o de desarrollo y exclúyelo de la distribución si no es necesario.
- Cuándo llamarlo
- Registra el estado Ready del Manager, las transiciones aceptadas y los fallos mientras el componente está habilitado.
- Comportamiento
- El observador nunca cambia la progresión. Registrar todos los eventos puede generar demasiado contenido y debe permanecer desactivado en una compilación final.
using System;
using System.Collections;
using System.Collections.Generic;
using OverFuture.ChapterObjectiveSystem.Chapters;
using OverFuture.ChapterObjectiveSystem.Events;
using OverFuture.ChapterObjectiveSystem.Objectives;
using OverFuture.ChapterObjectiveSystem.Persistence;
using OverFuture.ChapterObjectiveSystem.Progression;
using UnityEngine;
public sealed class DebugDemoObserverExample : MonoBehaviour
{
private ChapterManager manager;
private void OnEnable()
{
manager = ChapterManager.Instance;
if (manager == null)
{
return;
}
manager.OnManagerReady.AddListener(LogState);
manager.OnBeforeSceneLoad.AddListener(LogState);
manager.ChapterFailed += LogFailure;
}
private void OnDisable()
{
if (manager == null)
{
return;
}
manager.OnManagerReady.RemoveListener(LogState);
manager.OnBeforeSceneLoad.RemoveListener(LogState);
manager.ChapterFailed -= LogFailure;
manager = null;
}
private void LogState()
{
if (manager != null)
{
Debug.Log(
$"Chapter={manager.CurrentChapterId}, " +
$"Objective={manager.CurrentObjectiveId}, " +
$"Transitioning={manager.IsTransitioning}",
this);
}
}
private void LogFailure(ChapterFailureInfo information)
{
Debug.Log($"Failure: {information.Reason}", this);
}
}