Menu
CoddyTech

Moverse hacia un punto

Parte de la sección Fundamentos de scripting en Unity del Journey de Unity de Coddy. Lección 27 de 67.

Vector3.MoveTowards(current, target, maxStep) devuelve un punto hasta maxStep más cerca de target. Cuando el objetivo está más cerca que eso, devuelve el propio objetivo, así que nunca se pasa. Con speed * Time.deltaTime como paso, un objeto se desplaza a velocidad constante y se detiene justo en el objetivo. Este teleférico se desliza hasta su estación a 2 unidades por segundo:

public Vector3 station = new Vector3(6, 3, 0);
public float speed = 2f;

void Update()
{
    transform.position = Vector3.MoveTowards(transform.position, station, speed * Time.deltaTime);
}

Una vez que llega, todas las llamadas posteriores devuelven station de nuevo, así que el teleférico se queda quieto, y transform.position == station es true. Para un solo número, Mathf.MoveTowards funciona de la misma manera.

Vector3.Lerp(a, b, t) es el punto situado a una fracción t del trayecto desde a hasta b: con t = 0.5 está a mitad de camino. Escrito como Lerp(transform.position, station, 2f * Time.deltaTime) en Update(), recorre una parte de la distancia restante en cada fotograma: rápido al principio, cada vez más lento al acercarse al final, avanzando poco a poco en vez de llegar a una velocidad fija. Usa MoveTowards cuando un objeto deba desplazarse a una velocidad fija y detenerse justo en el objetivo; usa ese patrón de Lerp para una desaceleración suave.

challenge icon

Desafío

Intermedio

El dron espera en el aire hasta que pulses Space. A partir de entonces, vuela en línea recta hacia pad, la posición de la plataforma de aterrizaje, a speed unidades por segundo, y aterriza exactamente sobre ella. Cuando aterriza, registra Landed una sola vez, no de nuevo en cada fotograma posterior.

Pulsa Play, pulsa Space y después Check.

Pruébalo tú mismo

using UnityEngine;

public class Drone : MonoBehaviour
{
    public Vector3 pad = new Vector3(0, 0.25f, 0);
    public float speed = 2f;

    void Update()
    {
        // Después de pulsar Space: vuela hacia pad a velocidad speed y registra Landed una sola vez al llegar
    }
}
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 Fundamentos de scripting en Unity