Añade diálogos funcionales y elegantes en Unity con una caja inferior, texto legible y un indicador claro para avanzar. Verás cómo crear un único Dialogue Manager que centraliza todos los textos, ajustar la UI para máxima lectura y controlar la visibilidad con un script en C# usando Input.GetKeyDown(KeyCode.Space).
¿Cómo preparar el layout en el canvas para el diálogo?
Para centralizar la lógica visual, se crea un único Dialogue Manager dentro del Canvas. Este objeto gestionará todos los diálogos, aunque cada personaje tenga el suyo, y los mostrará siempre en el mismo lugar.
- Crear un GameObject vacío como hijo del Canvas y nombrarlo Dialogue Manager.
- Añadir una imagen de UI como fondo de la caja de diálogo.
- Usar un color gris oscuro, no negro absoluto, para contrastar con el texto blanco.
- Aplicar ligera transparencia: permite ver el escenario de fondo y evita una interfaz pesada.
- Ajustar el anclaje con Shift + Alt en el RectTransform: anclar al borde inferior.
- Expandir la imagen para que ocupe todo el espacio del padre: ancho y alto del manager.
La posición y tamaño del Dialogue Manager definen el área del diálogo. Si mueves el manager, el contenido interior se ajusta automáticamente y la interfaz “respira” mejor con márgenes.
¿Qué ajustes de UI mejoran la legibilidad?
El texto principal debe ser claro, con buen contraste y márgenes internos. El indicador de avance es secundario y discreto, preferiblemente alineado abajo a la derecha.
- Añadir un objeto de UI tipo texto para el contenido del diálogo.
- Elegir color de fuente blanco o claro y la fuente del proyecto.
- Ajustar el RectTransform con las manecillas azules para dejar márgenes en todos los bordes.
- Crear un segundo texto pequeño para la ayuda: «Pulsa espacio para continuar».
- Alinear este texto a la derecha y abajo; reducir el tamaño de la fuente.
- Priorizar el diálogo sobre el indicador: si falta espacio, reducir el texto de ayuda o ampliar la caja.
- Opcional: aplicar efectos de UI como borde negro o sombreado para mejorar la lectura.
Consejo de jerarquía: colocar los dos textos como hijos de la imagen de fondo. Al ocultar la imagen, desaparecerán también los textos.
¿Cómo programar el DialogueManager en C# para mostrar y ocultar?
La lógica se basa en una variable de estado que sincroniza la UI con el código. Cuando el diálogo está activo, la caja se muestra; si se pulsa espacio, se oculta.
using UnityEngine;
using UnityEngine.UI;
public class DialogueManager : MonoBehaviour
{
public GameObject DialogBox; // imagen/fondo que contiene todo.
public Text DialogueText; // texto principal del diálogo.
public bool DialogueActive; // estado: mostrar/ocultar.
void Update()
{
if (DialogueActive && Input.GetKeyDown(KeyCode.Space))
{
DialogueActive = false;
DialogBox.SetActive(false);
}
}
public void ShowDialogue(string text)
{
DialogueActive = true;
DialogBox.SetActive(true);
DialogueText.text = text;
}
}
Puntos clave del flujo:
- Librería: usar UnityEngine.UI para acceder a Text.
- Referencias públicas: asignar en el Inspector la caja (imagen) y el texto.
- Estado: DialogueActive sincroniza lo visual con el código.
- Interacción: Input.GetKeyDown(KeyCode.Space) avanza o cierra el diálogo.
- Método ShowDialogue(string text): activa la caja y coloca el contenido.
Nota práctica: si al pulsar espacio no se cierra, revisa el estado del booleano. Debe estar en true cuando el diálogo está visible, y pasar a false al cerrarse.
¿Te gustaría que en próximos pasos conectemos este Dialogue Manager con la detección de proximidad del NPC y el input de hablar? Comparte en comentarios qué variaciones de interfaz te gustaría ver (iconos, nombre del personaje, bordes personalizados).