Agregar múltiples líneas de diálogo en Unity con C# es sencillo y potente: convierte una línea única en un array de strings y controla el flujo desde el manager con la tecla espacio. Con esta mejora, cada NPC puede tener tantas frases como necesites, el UI se oculta al terminar y el índice se reinicia para futuros diálogos.
¿Cómo gestionar múltiples líneas de diálogo en Unity con C#?
Transformar el sistema para manejar varios mensajes requiere mínimos cambios bien enfocados. Se agrega estado para saber qué línea mostrar, se avanza con espacio y se desactiva el dialogBox al terminar. Así, el manager deja de depender de un único texto y pasa a usar un array.
¿Qué variables públicas usar en el manager?
- Un array de strings para las líneas del diálogo.
- Un índice para la línea actual.
- Un booleano de estado para saber si el diálogo está activo.
public string[] dialogLines; // Todas las líneas del diálogo
public int currentDialogLine; // Índice de la línea actual
public bool dialogActive; // ¿Hay diálogo en pantalla?
public GameObject dialogBox; // Caja de texto (UI)
public Text dialogText; // Texto del diálogo
Claves que se aplican aquí: control de estado con booleanos, uso de array e índices, y actualización de UI con dialogText.text.
¿Cómo cambia el update para avanzar con la tecla espacio?
Al pulsar espacio mientras el diálogo está activo, se incrementa el índice. Luego se valida si quedan líneas; si no, se cierra el UI y se reinicia el índice.
void Update()
{
if (dialogActive && Input.GetKeyDown(KeyCode.Space))
{
currentDialogLine++;
}
if (dialogActive)
{
if (currentDialogLine >= dialogLines.Length)
{
dialogActive = false; // No hay más líneas.
dialogBox.SetActive(false); // Oculta la caja de texto.
currentDialogLine = 0; // Reinicia para el próximo NPC.
}
else
{
dialogText.text = dialogLines[currentDialogLine];
}
}
}
Puntos importantes: validación con dialogLines.Length, avance secuencial y reinicio para evitar que un nuevo NPC empiece en la última línea usada.
¿Cómo iniciar el diálogo y pasar las líneas a showDialog?
El método acepta ahora un array de líneas. Al iniciar, activa el estado, muestra la caja y posiciona el índice al inicio, asignando las líneas recibidas al manager.
public void showDialog(string[] lines)
{
dialogActive = true;
dialogBox.SetActive(true);
currentDialogLine = 0;
dialogLines = lines; // El manager guarda el array recibido.
}
Así, el manager deja de depender de un único string y maneja un conjunto de líneas de forma ordenada y clara.
¿Cómo configurar el NPC y el inspector para arrays de diálogo?
El NPC ya no envía un único texto: ahora expone un array. Esto permite definir varias frases desde el Inspector y pasarlas al manager en el momento de iniciar conversación.
// Antes:
// public string dialog;
// Ahora:
public string[] dialog; // Múltiples líneas para este NPC
// Al iniciar el diálogo (donde ya lo hacías antes):
dialogManager.showDialog(dialog);
En el Inspector, ajusta el tamaño del array y reparte el texto largo en frases cortas. Ejemplo de tres líneas para un personaje llamado Ricardo:
- "Hola, soy Ricardo.".
- "Estoy aquí para ayudarte.".
- "Espero que disfrutes de nuestra aldea.".
Beneficios inmediatos: mejor legibilidad, control preciso del ritmo y mensajes más naturales al pulsar espacio para continuar.
¿Qué mejoras quedan pendientes en la experiencia de diálogo?
Al probar, aparecen dos detalles de UX que conviene pulir para una experiencia más coherente:
- Detener el movimiento del NPC mientras habla. Parece desinteresado si se aleja.
- Bloquear acciones del jugador durante el diálogo. Evita irse o luchar mientras hay texto en pantalla.
Estos ajustes se abordarán a continuación: mejoran la inmersión y evitan inconsistencias entre conversación y jugabilidad.
¿Con qué RPG te has enamorado por sus líneas de diálogo? Comparte tus favoritos y por qué te marcaron, así afinamos futuros cursos.