Menu
CoddyTech

Puntos de paso

Lección 1 de 18 del curso Juego de Unity: defensa de torres de Coddy.

En este curso crearás un juego de defensa de torres. Los enemigos avanzan en oleadas por un camino hacia tu base, y los detienes con torres que colocas en plataformas de construcción, que luego mejoras y vendes. Cada lección añade una característica. Los doce scripts del juego están en el proyecto desde el principio; la mayoría son esqueletos breves que se completan en lecciones posteriores.

Un enemigo sigue el camino mediante waypoints: GameObjects vacíos en las esquinas, en un array en el orden en que se recorren. El enemigo conserva el índice del waypoint hacia el que se dirige, avanza hacia él y, al llegar, sigue hacia el siguiente. Vector3.MoveTowards(current, target, maxStep) mueve un punto hacia un objetivo como máximo maxStep y nunca lo sobrepasa, así que el enemigo llega exactamente al waypoint y == puede indicar que ha llegado. Este dron de patrulla vuela entre sus puestos y vuelve a empezar después del último:

public Transform[] posts;
public float speed = 3f;
private int current;

void Update()
{
    Vector3 goal = posts[current].position;
    transform.position = Vector3.MoveTowards(transform.position, goal, speed * Time.deltaTime);
    if (transform.position == goal)
    {
        current = (current + 1) % posts.Length;
    }
}

Un enemigo no vuelve al principio: después del último waypoint, no tiene adónde ir. Cuando el índice alcanza Length, ya no apunta a un waypoint, y leer waypoints[waypoints.Length] lanza una excepción IndexOutOfRangeException, así que se comprueba el índice antes de usarlo. Los waypoints están a 0.6 por encima del suelo, a la altura del centro de un enemigo, así que caminar directamente hacia ellos mantiene sus pies en el suelo.

challenge icon

Desafío

Fácil

El Grunt está en el primer punto de referencia, WP0, y su script Enemy ya tiene los ocho puntos de referencia en waypoints, desde WP0 en el punto de aparición hasta WP7 en la base.

  1. Añade un int privado next: el índice del punto de referencia hacia el que se dirige el Grunt. Empieza en WP0, así que next empieza en 1.
  2. En Update, mueve el Grunt hacia waypoints[next] a speed unidades por segundo con Vector3.MoveTowards.
  3. Cuando llegue a ese punto de referencia, dirígelo hacia el siguiente.
  4. Después del último punto de referencia, detente: no habrá más movimiento ni errores.

Pulsa Play y observa cómo el Grunt recorre el camino; después, pulsa Check.

Pruébalo tú mismo

using UnityEngine;

public class Enemy : MonoBehaviour
{
    public float speed = 2f;
    public Transform[] waypoints;

    void Update()
    {
        // Recorre la ruta aquí: de un punto de referencia a otro, en orden.
    }
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Juego de Unity: defensa de torres