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#?
usingUnityEngine;publicclassNPCDialogue:MonoBehaviour{publicstring dialogue;// línea que dirá el NPCprivateDialogueManager manager;// referencia al gestor de diálogosprivatebool playerInTheZone;// estado de jugador en zonavoidStart(){ manager =FindObjectOfType<DialogueManager>();}voidOnTriggerEnter2D(Collider2D other){if(other.gameObject.CompareTag("Player")){ playerInTheZone =true;}}voidUpdate(){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<DialogueManager>(): 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.