Dar un objetivo claro a tu juego de rol pasa por un sistema de misiones bien diseñado. Aquí se construye, paso a paso, un flujo en C# con un QuestManager que coordina quests, controla estados de completado y muestra mensajes vía un DialogManager. Como en The Witcher, Final Fantasy o World of Warcraft, las quests mantienen el juego vivo y con propósito.
¿Cómo dan objetivo las quests al personaje?
Las quests transforman un mundo jugable en una experiencia dirigida. Dejan de ser un “second life” y pasan a tener metas concretas: ir a un lugar, recoger un objeto o derrotar enemigos. Este enfoque permite crear “infinidad” de misiones y actualizarlas con facilidad para sostener el interés durante años.
- Quests con propósito. Definen objetivos claros para el jugador.
- Tipos base. Desplazamiento, recolección y combate.
- Escalabilidad. Añade nuevas quests sin tocar la arquitectura central.
¿Cómo organizar el proyecto y el QuestManager?
Primero, crea un objeto vacío llamado “quest manager” como hijo del canvas. Bajo él, añade tres GameObjects vacíos: “quest 0”, “quest 1” y “quest 2”. Para nuevas misiones, solo crea más objetos “quest” y configúralos como se muestra.
¿Qué es el QuestManager y qué guarda?
El QuestManager es el “director” que coordina todas las misiones. Mantiene:
- Un arreglo de quests activas.
- Un arreglo de estados completados con bool por cada quest.
public class QuestManager : MonoBehaviour
{
public Quest[] quests; // Misiones configuradas.
public bool[] questCompleted; // Estado de cada misión.
private DialogManager dialogManager; // Referencia al sistema de diálogos.
void Start()
{
questCompleted = new bool[quests.Length];
dialogManager = FindObjectOfType<DialogManager>();
}
public void ShowQuestText(string questText)
{
// Adaptar a formato del DialogManager (array de líneas):
string[] dialogLines = new string[] { questText };
dialogManager.ShowDialog(dialogLines);
}
}
¿Cómo inicializar estados y exponer el arreglo de quests?
En el editor, asigna el tamaño del arreglo de quests (por ejemplo, 3) y arrastra “quest 0”, “quest 1” y “quest 2” a sus posiciones. El arreglo questCompleted se dimensiona automáticamente en Start() con quests.Length.
- Estados independientes. Cada índice del arreglo representa una misión única.
- Repetibilidad opcional. Podrás decidir si una misión se repite o no.
¿Cómo mostrar el texto de misión con el DialogManager?
Las misiones suelen mostrar una sola línea al iniciar o completar. Para reutilizar el sistema de diálogos de NPCs, se convierte ese único texto a un arreglo de una línea y se pasa al DialogManager mediante ShowQuestText.
- Integración directa. El QuestManager centraliza las llamadas al DialogManager.
- Compatibilidad. Se respeta el formato de datos del diálogo existente.
¿Qué datos y métodos necesita cada quest?
Cada quest es un objeto con sus parámetros y lógica mínima. Se identifica con un questId, se conecta al QuestManager y expone textos de inicio y de completado.
¿Cómo identificar y completar una quest?
Usa un identificador único y marca el estado en el manager. Opcionalmente, desactiva el GameObject para que la misión sea única.
public class Quest : MonoBehaviour
{
public int questId; // Identificador único de la misión.
public string startText; // Mensaje al iniciar.
public string completeText; // Mensaje al completar.
private QuestManager manager; // Referencia al director de misiones.
void Start()
{
manager = FindObjectOfType<QuestManager>();
}
public void CompleteQuest()
{
manager.questCompleted[questId] = true;
manager.ShowQuestText(completeText);
gameObject.SetActive(false); // Opcional: evitar repetir la misión.
}
}
- Marcado de estado.
questCompleted[questId] = true asegura trazabilidad.
- Control de ciclo. Desactivar la misión evita duplicados no deseados.
¿Cómo iniciar y comunicar mensajes al jugador?
Al arrancar una misión, muestra su texto de inicio usando el manager.
public void StartQuest()
{
manager.ShowQuestText(startText);
}
- Mensajes claros. Inicio y fin comunican progreso al jugador.
- Reutilización. Todo pasa por
ShowQuestText del manager.
¿Qué patrón organizativo estás aplicando?
Se usa una estructura “por departamentos”: las quests son “empleados” que reportan a su manager de misiones; el QuestManager se coordina con otro manager (el DialogManager) para textos. No hay comunicación directa entre quests. Esto aporta:
- Orden y mantenimiento. Menos dependencias cruzadas.
- Escalabilidad. Añadir misiones es inmediato.
- Reutilización. El sistema de diálogos sirve también para misiones.
¿Quieres que profundicemos en los tres tipos de misiones (ir, recoger, derrotar) o en cómo permitir quests repetibles? Cuéntame en comentarios qué te gustaría implementar primero.