Creación de Misiones de Recolección en Videojuegos

Clase 51 de 60Curso Avanzado de Creación de RPGs con Unity

Resumen

Pasar de llegar a una zona a recoger un objeto cambia la lógica del sistema de misiones. Aquí se construye un flujo claro: preparar el objeto con collider, activar la quest al cruzar un start point, detectar la recolección con OnTriggerEnter2D y completar la misión cuando el item coincide. Todo con scripts en C# y referencias simples.

¿Qué cambia en la misión basada en objeto?

La meta ya no es un trigger de zona, sino encontrar y recoger un item. Se coloca una campana en el cementerio y se ajusta su visibilidad con sorting layer en «player» para que quede encima del escenario. Se añade un CircleCollider2D y se marca como isTrigger para poder recogerla con el jugador.

  • Objetivo: recoger la «Campana del despertar»..
  • Inicio: clonar el objeto «quest cero start» a «quest uno start». Indicar que inicia la quest 1 cerca de Ricarda..
  • Textos: inicio «Recoge la campana del despertar». fin «Has conseguido la campana. Que empiece el fin del mundo»..

¿Cómo preparar el objeto con collider y sorting layer?

  • Poner la campana en el cementerio.
  • Asignar sorting layer «player» para que se dibuje encima..
  • Añadir CircleCollider2D y activar «is trigger» para detectar al jugador..
  • Guardar el objeto y nombrarlo «Campana»..

¿Cómo configurar el inicio y fin de la quest 1?

  • Clonar «quest cero start» a «quest uno start» y marcar como start point de la quest 1..
  • Desactivar en jerarquía la quest 1 hasta que el jugador pase por su zona de inicio..
  • Ajustar los textos de inicio y fin según el objetivo de la campana..

¿Cómo crear el script quest item para recolectar?

Se añade un script de C# llamado «quest item» al objeto campana. Este notifica al manager cuando el jugador lo recoge y desactiva el objeto.

using UnityEngine; [RequireComponent(typeof(CircleCollider2D))] public class QuestItem : MonoBehaviour { public int questID; // ID de la quest. public string itemName; // Identificador del ítem. private QuestManager manager; // Referencia al manager. void Start() { manager = FindObjectOfType<QuestManager>(); } void OnTriggerEnter2D(Collider2D collision) { if (collision.gameObject.tag.Equals("Player")) { // Solo si la quest está activa y no completada. if (manager.quests[questID].gameObject.activeInHierarchy && !manager.questsCompleted[questID]) { manager.itemCollected = itemName; // Notificar recolección. gameObject.SetActive(false); // Desactivar la campana (no destruir). } } } }

¿Qué necesita el quest manager para recibir el ítem?

  • Añadir en el manager una variable pública: public string itemCollected;.
  • Esta cadena actúa como identificador del último item recolectado..

¿Cómo adaptar el script de la quest para validar el ítem?

Cada quest puede declarar si necesita un objeto y cuál. Luego, en Update, se compara el recolectado en el manager con el requerido. Si coincide, se completa la misión.

public class Quest : MonoBehaviour { public bool needsItem; // ¿La quest requiere ítem? public string itemNeeded; // Nombre exacto del ítem requerido. private QuestManager manager; void Start() { manager = FindObjectOfType<QuestManager>(); } void Update() { if (needsItem && manager.itemCollected == itemNeeded) { manager.itemCollected = null; // Marcar como usado. CompleteQuest(); // Completar misión. } } void CompleteQuest() { // Lógica de completar: textos de fin, flags, etc. } }
  • Usa coincidencia exacta entre itemNeeded y itemName. Se pueden usar palabras, números o hashmaps para identificar, según se prefiera..
  • Ventaja: se añade funcionalidad sin romper lo anterior. Solo se suman campos y una verificación en Update..

¿Qué pruebas y errores comunes se corrigen?

  • Desactivar la quest 1 en la jerarquía hasta entrar en su zona de inicio..
  • En la campana: questID = 1 y itemName = "Campana de despertar" (el identificador debe ser idéntico al que espera la quest)..
  • Activar «is trigger» en el CircleCollider2D para permitir la recolección..
  • Flujo de validación: iniciar con Ricarda, completar su primera misión en la casa, activar «Recoge la campana del despertar», ir al cementerio, recoger la campana y ver el texto de fin..

¿Te gustaría compartir cómo nombrarías tus ítems o qué otros objetos añadirías al sistema?

      Creación de Misiones de Recolección en Videojuegos