Programación de diálogos interactivos para NPCs en videojuegos

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

Resumen

Implementa un sistema de diálogo de NPC en Unity de forma simple y efectiva: una Dialogue Zone con Box Collider 2D en modo trigger, un script en C# que escucha la tecla Intro, y un Dialogue Manager que muestra el texto. Con esta estructura, cualquier personaje puede iniciar conversaciones claras y controladas por el jugador.

¿Cómo implementar el diálogo de un NPC en Unity?

Para iniciar conversaciones de forma consistente, se prepara una zona alrededor del NPC y un script que detecta cuándo el jugador decide hablar. El flujo es directo: el jugador entra en la zona, pulsa la tecla, y el Dialogue Manager muestra la línea configurada.

¿Cómo crear la Dialogue Zone y configurar el collider?

  • Crear un hijo vacío del NPC llamado Dialogue Zone.
  • Añadir un Box Collider 2D y marcarlo como trigger.
  • Ajustar el tamaño: un poco más grande que el personaje para no exigir demasiada proximidad.
  • Si se desea hablar solo por delante: recortar el collider para cubrir la zona frontal.
  • Evitar que sea un objeto físico: activar isTrigger permite atravesarlo y detecta entradas.

¿Qué hace el script NPC Dialogue en C#?

using UnityEngine;

public class NPCDialogue : MonoBehaviour
{
    public string dialogue; // línea que dirá el NPC

    private DialogueManager manager; // referencia al gestor de diálogos
    private bool playerInTheZone;    // estado de jugador en zona

    void Start()
    {
        manager = FindObjectOfType<DialogueManager>();
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.CompareTag("Player"))
        {
            playerInTheZone = true;
        }
    }

    void Update()
    {
        if (playerInTheZone && Input.GetKeyDown(KeyCode.Return))
        {
            manager.ShowDialogue(dialogue);
        }
    }
}
  • Variable pública dialogue: texto que dirá el NPC.
  • Referencia a Dialogue Manager: muestra el diálogo en pantalla.
  • Bandera playerInTheZone: solo permite iniciar si el jugador está en la zona.
  • Start con FindObjectOfType(): localiza el único gestor.
  • OnTriggerEnter2D: valida la tag "Player" y habilita el inicio.
  • Update con Input.GetKeyDown(KeyCode.Return): escucha la tecla Intro y llama a ShowDialogue.

¿Cómo iniciar y mostrar el diálogo con la tecla Intro?

El inicio se basa en dos condiciones: que el jugador esté dentro de la Dialogue Zone y que presione la tecla Intro. Cuando ambas se cumplen, el Dialogue Manager recibe la cadena y la muestra en la caja de diálogo.

¿Cómo gestionar la UI del diálogo con el Dialogue Manager?

  • Desactivar la imagen/caja de diálogo por defecto: la activa el Dialogue Manager al invocar ShowDialogue.
  • Interacción fluida: al pulsar la barra espaciadora, el diálogo avanza o se oculta según lo definido en el gestor.
  • Persistencia opcional: con Don’t Destroy On Load el gestor puede mantenerse único entre escenas.
  • Resultado esperado: el jugador se acerca al NPC, pulsa Intro y ve el texto, por ejemplo: «Hola, soy Ricardo y estoy probando el videojuego».

¿Qué buenas prácticas y extensiones se sugieren?

Para extender y mantener el sistema, conviene estructurar el NPC con zonas especializadas y aprovechar un gestor único para la UI de diálogos.

  • Dialogue Zone como hijo del NPC: organiza responsabilidades por zonas.
  • Box Collider 2D en trigger: evita colisiones físicas y detecta entradas.
  • Tag "Player": identifica al protagonista sin ambigüedades.
  • Dialogue Manager centralizado: muestra, oculta y controla la caja de texto.
  • FindObjectOfType con un único gestor: simplifica referencias.
  • Input.GetKeyDown(KeyCode.Return): decisión explícita del jugador para iniciar.
  • SubGameObjects para más funciones: añade otras zonas si el NPC hace más que hablar.
  • Líneas configurables: texto editable por NPC para personalizar comportamientos.
  • Tecla espacio para continuar: navegación rápida por la línea mostrada.
  • Futuras mejoras: múltiples líneas de diálogo y lógica adicional cuando se requiera.

¿Te gustaría ampliar este sistema con múltiples líneas o condiciones especiales por NPC? Cuéntame en los comentarios qué interacción te interesa construir y cómo te gustaría que respondiera el Dialogue Manager.

      Programación de diálogos interactivos para NPCs en videojuegos