None
Los eventos o el código del proyecto deciden lo siguiente.
Conceptos
Utiliza un capítulo como un segmento lineal acotado, con identidad estable, eventos de ciclo de vida, contenido ordenado y una acción final.
Un Chapter contiene la lista ordenada, decide qué fila es actual, omite las que no cumplen sus condiciones, ejecuta las acciones de inicio y final, conserva su estado y comunica la finalización al Manager. Es una buena unidad para una misión, una parte de tutorial, una fase de nivel o un bloque narrativo con principio y final claros.
Crea varios capítulos cuando necesites identidades, puntos de entrada, transiciones o registros de finalización independientes. No dividas una secuencia corta únicamente para multiplicar apartados.
| Campo | Significado | Regla |
|---|---|---|
| Title | Nombre legible en el Editor | Puede cambiar sin utilizarse como clave |
| Identifier | ID exacto para selección, enlaces, transferencias y progreso | Debe ser único y estable |
| On Chapter Start | Se invoca en un inicio o una reanudación activa | No garantiza que la primera fila sea apta |
| Ordered Objectives | Secuencia lineal | El orden y los ID son significativos |
| On Chapter Completion | Se invoca tras guardar la finalización | Precede a la transición del Manager |
| Completion Action | Decisión al terminar | El Editor muestra solo los campos necesarios |
Failed se alcanza únicamente mediante un fallo explícito aceptado. Seleccionar un capítulo de nuevo inicia una ejecución limpia y borra su progreso conocido. Restaurar progreso no vuelve a ejecutar eventos históricos. El valor antiguo CanFail se conserva para compatibilidad, pero ya no bloquea el comando de fallo de V1.
Los eventos o el código del proyecto deciden lo siguiente.
Carga la escena y deja que su Manager aplique su inicio habitual.
Guarda una transferencia de un solo uso con el capítulo de destino.
Añade el objetivo de destino a la transferencia y respeta los estados terminales ya guardados.
Consulta Transiciones de escena y transferencia antes de combinar estas opciones con persistencia.
Default Chapter es una elección del Manager, no un modo especial del componente ni una comparación con Title. Solo uno de los capítulos encontrados puede ser el destino predeterminado cuando no existe una transferencia válida y tampoco hay una selección de pruebas habilitada en el Editor. Cambiarlo no inicia el capítulo ni modifica el progreso guardado.
El orden de Chapter List facilita la lectura y mantiene selectores predecibles, pero no encadena capítulos automáticamente. Para pasar de uno a otro, Completion Action debe indicar un destino o el código del proyecto debe seleccionarlo. El avance automático ocurre dentro de la lista Ordered Objectives de cada Chapter.
| Control | Efecto | Qué revisar |
|---|---|---|
| Add Chapter | Crea un GameObject Chapter bajo el Manager y genera un ID único | Define Title, añade objetivos y elige el predeterminado si corresponde |
| Duplicate | Copia la configuración y las filas, pero genera identidades nuevas | Vuelve a enlazar los componentes copiados y evita enlaces duplicados |
| Move Up / Move Down | Cambia el orden de la lista y la jerarquía con Undo | El orden interno de los objetivos de cada Chapter no cambia |
| Delete | Elimina el Chapter y sus contenedores mediante Unity Undo | Selecciona otro predeterminado y repara transferencias, enlaces y código |
Puedes cambiar Title sin afectar a las integraciones. Cambia Identifier solo como una migración, porque los enlaces de escena, el código, las claves guardadas y las transferencias comparan el valor exacto.
La lista puede ser larga, pero solo existe una posición actual. On Chapter Start se invoca una vez después de pasar a Active y antes de que termine la espera inicial del primer objetivo disponible. Cada fila gestiona después sus propias acciones. On Chapter Completion solo se invoca cuando todas las filas no nulas están Completed o Skipped y ya se ha escrito la finalización del capítulo.
No todas las filas necesitan un componente de escena. Pueden completarse desde una interfaz, un diálogo, un Objective propio o código externo. En sentido contrario, colocar un detector bajo el GameObject del Chapter no lo incorpora a la secuencia si no tiene un Objective Link exacto.
| Operación | Resultado | No hace |
|---|---|---|
StartChapter() o selección del Manager | Reinicia el progreso conocido de ese Chapter, lo activa, invoca On Chapter Start y comienza en la fila solicitada o la primera | No restaura Active ni Failed antiguos |
TryStepBack(currentObjectiveId) | Exige el ID activo exacto, cierra la posición actual en modo de retroceso, reinicia el detector anterior y lo activa | No es un historial libre ni permite ir antes de la primera fila |
| Reanudación restaurada | Aplica Completed/Skipped y continúa por la primera fila pendiente sin repetir eventos históricos | No restaura Active o Failed ni deduce que el Chapter terminó solo por sus filas |
ClearProgress() | Elimina las claves conocidas del Manager y reinicia el estado en memoria | No borra otros perfiles, otros ámbitos ni la partida general |
Consulta Reinicio y retroceso y Persistencia del progreso para conocer el contrato completo.
Tutorial de energía como Title, conserva el Identifier generado y selecciónalo como predeterminado.Leer el panel, Activar el generador y Llegar a la salida. Ordénalas con Move Up/Down.El ejemplo C# compilado que aparece al final selecciona un Chapter por su Identifier exacto y comprueba el resultado. Para completar objetivos desde código, continúa con Completar y controlar la progresión.
Confirma que existe al menos una fila no nula, que el ID inicial resuelve y que las condiciones permiten continuar o marcan la fila como Skipped.
Revisa primero la transferencia de un solo uso, después la selección de pruebas y por último Default Chapter. La transferencia tiene prioridad.
Busca la primera fila sin estado final. Una entrada nula se omite con una advertencia; una fila Active todavía necesita una solicitud exacta aceptada.
Duplicar los datos no cambia automáticamente el destino de todos los detectores copiados. Enlázalos con las filas nuevas o elimina el componente sobrante.
Si un Chapter figura Completed pero conserva una fila pendiente, se mantiene el dato y se informa del problema. La reanudación empieza en la primera fila pendiente.
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 ChapterSelectionExample : MonoBehaviour
{
public bool TryStartChapter(string chapterId)
{
ChapterManager manager = ChapterManager.Instance;
return manager != null &&
!string.IsNullOrWhiteSpace(chapterId) &&
manager.TrySelectChapter(chapterId);
}
}