Programación de Movimiento Aleatorio para Enemigos en Juegos de Rol
Clase 21 de 60 • Curso Avanzado de Creación de RPGs con Unity
Resumen
¿Cómo programar movimiento aleatorio en un enemigo de videojuego?
¡Crear un enemigo que se mueva inteligentemente por el escenario puede elevar el nivel de tu videojuego a nuevas alturas! Este ejercicio te guiará en la programación de un script en C# que dota a tu enemigo de movimiento aleatorio en un juego tipo rol. Sin embargo, este script es lo suficientemente genérico para que se aplique tanto a distintos tipos de enemigos como a múltiples mecánicas dentro del juego.
La clave aquí será crear una pequeña inteligencia artificial que simule el desplazamiento aleatorio de los enemigos. ¡Manos a la obra!
¿Cómo estructurar el script del controlador del enemigo?
Para comenzar, necesitamos un nuevo script en C# que sea llamado EnemyController
. Asegúrate de asignarlo correctamente al objeto enemigo en Unity. Este controlador será el cerebro que manejará el movimiento aleatorio del enemigo. Una vez preparado, abriremos el script en Visual Studio para definir las variables necesarias.
¿Cuáles son las variables esenciales para el movimiento del enemigo?
Dentro de nuestro script, introduciremos variables que contribuirán directamente al manejo del movimiento. Estas incluyen:
public float enemySpeed = 1;
: define la velocidad inicial del enemigo.private Rigidbody2D enemyRigidbody;
: necesario para manejar las físicas de su movimiento.private bool isMoving;
: identifica cuándo el enemigo está en movimiento.public float timeBetweenSteps;
: tiempo entre cada movimiento.private float timeBetweenStepsCounter;
: control de tiempo entre movimientos.public float timeToMakeStep;
: tiempo que dura un movimiento.private float timeToMakeStepCounter;
: contador para calcular el tiempo de un movimiento.public Vector2 directionToMakeStep;
: dirección del próximo movimiento.private Animator enemyAnimator;
: para actualizar la dirección del movimiento en las animaciones.- Constantes para animaciones:
private const string horizontal = "Horizontal";
private const string vertical = "Vertical";
¿Cuál es la lógica detrás de su movimiento?
El flujo del movimiento se diseñará dentro del método Update
. Se verificará constantemente si el enemigo está en movimiento o detenido y actuará en consecuencia:
- Movimiento activo (
isMoving
):
- Resta
Time.deltaTime
atimeToMakeStepCounter
. - Mueve al enemigo aplicando
enemyRigidBody.velocity = directionToMakeStep * enemySpeed;
. - Si el contador llega a cero, se detiene el movimiento asignando
enemyRigidbody.velocity = Vector2.zero;
, marcandoisMoving
como falso.
- Movimiento inactivo:
- Decrementa
timeBetweenStepsCounter
utilizandoTime.deltaTime
. - Al agotarse el contador, se activa nuevamente
isMoving
e inicia un nuevo periodo de movimiento asignando valores aleatorios adirectionToMakeStep
conRandom.Range
.
Al final del Update
, se deben enviar las direcciones al Animator
para reflejar los cambios visuales en el personaje.
enemyAnimator.SetFloat(horizontal, directionToMakeStep.x);
enemyAnimator.SetFloat(vertical, directionToMakeStep.y);
¿Por qué es importante ajustar los parámetros?
Los parámetros definen aspectos importantes como la velocidad y tiempo entre movimientos que influyen en el dinamismo y fluidez del juego. Un ejemplo de configuración podría ser:
- Velocidad (
enemySpeed
) de 1 unidad. - Tiempo entre pasos (
timeBetweenSteps
): 2 segundos. - Tiempo para un paso (
timeToMakeStep
): 1.5 segundos.
Estos valores deben ser configurados cuidadosamente para garantizar un comportamiento realista y desafío para el jugador. Con estos ajustes, podrás observar cómo el enemigo cambia de dirección y se desplaza aleatoriamente por el nivel, haciendo tu juego más interesante e impredecible. ¡No olvides guardar el script y dale al play para ver tu progreso en acción!