Conceptos
Modelo del sistema
Comprende la cadena de responsabilidad desde un ChapterManager hasta los capítulos, los objetivos ordenados y los componentes de escena opcionales.
Cuatro responsabilidades y un único control del progreso
Easy Chapter Generator separa los datos ordenados de la detección en escena. ChapterManager elige el capítulo y resuelve lo que cruza escenas. Chapter controla una lista. Cada ChapterObjective guarda identidad, condiciones, acciones y estado. Un componente Objective o un script del proyecto detecta la condición concreta y envía una solicitud exacta.
Registro ordenado frente a componente de escena
| Aspecto | Objetivo ordenado | Componente Objective |
|---|---|---|
| Ubicación | Lista serializada del capítulo | GameObject de la escena |
| Contenido | ID, título, estado, condiciones, espera, acciones y eventos | Collider, temporizador, objetos, ramas o mecánica propia |
| Inicio | Solo el Chapter lo activa | Nunca elige por sí mismo la posición |
| Finalización | Acepta la solicitud exacta cuando está activo | La solicita mediante Objective Link |
| Uso independiente | Puede completarse desde eventos o código | Sin registro enlazado no puede avanzar |
Esta separación permite cambiar un trigger por otra mecánica sin modificar la identidad ni el orden de la progresión.
La regla lineal
En un capítulo activo solo existe una posición actual no terminal. Las anteriores están Completed o Skipped; las posteriores continúan Not Started. Si las condiciones de una fila no se cumplen, se marca Skipped y se evalúa la siguiente. Una solicitud con cualquier ID distinto al activo se rechaza.
El fallo es independiente: una solicitud aceptada coloca el Chapter y el objetivo afectado en Failed, sin elegir una escena ni un reinicio.
Dónde debe vivir cada integración
Utiliza un UnityEvent cuando el sistema externo ya ofrece la señal exacta. Llama a la API del Manager o del Chapter cuando el código del proyecto toma la decisión. Hereda de Objective para crear un detector reutilizable con campos y estado temporal. Implementa adaptadores de movimiento, rutas o persistencia únicamente al sustituir esa frontera concreta.
No mantengas otro «índice de objetivo actual» en un script paralelo. Se desajustaría con objetivos omitidos, progreso restaurado, retroceso, fallo o cambios de escena. Lee siempre el estado público y conserva al Chapter como autoridad.
La responsabilidad no cambia al integrar otros sistemas
| Responsabilidad | Propietario | Resultado observable |
|---|---|---|
| Elegir el inicio y la progresión actual | ChapterManager | Un capítulo actual, un objetivo actual y el estado de transición |
| Avanzar por una secuencia delimitada | Chapter | Solo una posición disponible puede aceptar la finalización |
| Guardar condiciones, tiempos, acciones, eventos y estado final | ChapterObjective | La fila conserva su identidad aunque cambie el detector de escena |
| Detectar un botón, trigger, temporizador, colocación, llegada o mecánica propia | Componente de escena o código del proyecto | Envía una solicitud exacta; no avanza la lista por su cuenta |
| Gestionar diálogos, inventario, cámara, entrada, movimiento, interfaz y partida completa | Tu proyecto | Los sistemas reaccionan a la progresión sin ser sustituidos |
Una carga de escena tampoco cambia este reparto. El Manager de origen escribe una transferencia de un solo uso, Unity carga la escena de destino y su Manager la valida y consume antes de considerar la selección de pruebas o el Default Chapter.
Ejemplo completo: una consola y una zona de salida
- 1El Manager selecciona
chapter_lab. El Chapter evalúa la primera fila,use_console. - 2Un ButtonObjective enlazado con
use_consolerecibe la elección válida y solicita completar. El componente no puede elegir la fila siguiente. - 3El Chapter acepta el ID activo exacto, ejecuta el cierre de esa fila, guarda Completed y activa
reach_exit. - 4Un TriggerObjective enlazado con
reach_exitdetecta la permanencia. El Chapter lo acepta, llega al final de la lista y comunica la finalización. - 5El Manager reproduce el sonido del capítulo y aplica Completion Action. La interfaz y la cámara siguen perteneciendo al proyecto.
La consola puede pasar a un diálogo y la salida a un Objective propio. Mientras ambos soliciten el mismo ID enlazado, se conservan los datos, las claves guardadas, el orden y la política final.