Control de Diálogos y Movimiento en Videojuegos con Unity
Clase 48 de 60 • Curso Avanzado de Creación de RPGs con Unity
Resumen
¿Cómo parar al protagonista de nuestro videojuego durante un diálogo?
El mundo de la programación nos ofrece múltiples formas de abordar un problema, y aquí nos centraremos en cómo detener al personaje principal de nuestro videojuego, un entrañable conejito aun sin nombre. Para lograrlo, revisaremos un script originalmente diseñado para controlar el movimiento del personaje, el Player Controller
.
Añadir una variable para el diálogo
Comenzaremos añadiendo una nueva variable para manejar cuándo el jugador está en un diálogo. Esta variable ayudará a determinar si debe detenerse el movimiento del conejito durante una conversación.
public bool playerTalking;
Para asegurarnos que al iniciar el videojuego el personaje no esté hablando, podemos inicializar esta variable en false
en el método Start
:
playerTalking = false;
Ahora, modificaremos nuestro update
para detener al personaje cuando está conversando:
if (playerTalking)
{
playerRigidBody.velocity = Vector2.zero;
return;
}
Este simple control asegura que al iniciar un diálogo, el protagonista se detiene en seco, pausando tanto el movimiento como las animaciones.
¿Cómo sincronizar el diálogo con el control del jugador?
Una vez establecido cómo detenemos el personaje, es crucial mantener esta sincronización entre el diálogo y el control del jugador. Para esto, usamos el script Dialog Manager
.
Notificar al Player Controller desde el Dialog Manager
Primero, haremos referencia al Player Controller
dentro del Dialog Manager
para iniciar y finalizar los diálogos de manera efectiva.
private PlayerController playerController;
Procedemos a inicializarlo en Start
con:
playerController = FindObjectOfType<PlayerController>();
Luego, cuando se inicia un diálogo, notificamos al Player Controller
que el personaje está hablando:
playerController.playerTalking = true;
De igual manera, al finalizar un diálogo, necesitamos indicar que la conversación terminó para que el jugador pueda volver a moverse:
playerController.playerTalking = false;
¿Cómo expandir nuestro juego con nuevos NPCs y áreas de movimiento?
Una vez configurados los scripts, podemos empezar a agregar nuevos elementos y expandir el mundo de nuestro juego, creando prefabs
tanto para los NPCs como para las zonas de diálogo. Un prefab
es una plantilla que facilita la creación de múltiples instancias de un objeto en Unity.
Creación de prefabs para NPCs
Arrastramos nuestro NPC a la sección inferior de Unity para crear automáticamente un prefab
. Esto nos permite replicar el mismo NPC en diferentes ubicaciones o variarlo fácilmente.
Agregar personajes adicionales
Imagina que hemos añadido otro personaje, Ricarda, cerca de la casa de nuestro amigo Ricardo. Al seleccionar un aspecto diferente para Ricarda, no solo variamos el diseño, sino también las interacciones posibles:
- NPCs adicionales: añadir nuevos personajes le da vida al poblado, incentivando al jugador a explorar.
- Zonas de movimiento: podemos definir áreas específicas de movimiento para evitar que los personajes se muevan fuera de su contexto.
Para personalizar el diálogo de Ricarda, le asignamos líneas únicas y definimos una villager zone
– la zona en la que se mueve:
Hola, soy Ricarda. ¿Has visto a mi marido?
Esta expansión no solo profundiza la narrativa, sino que también incrementa la jugabilidad y la interacción, permitiendo que cada jugador modele el mundo a su gusto. Al animar a los estudiantes a crear más personajes y líneas de diálogo, se les instiga a perfeccionar sus habilidades en programación y creatividad, asegurando que su juego sea único y memorable.