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.