Menu
CoddyTech

Muévete hacia un punto

Parte de la sección Fundamentos de scripting en Unity del Journey de Unity de Coddy. Lección 35 de 85.

Vector3.MoveTowards(current, target, maxStep) devuelve un punto que está hasta maxStep más cerca de target. Si 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 exactamente 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 verdadero. Para un solo número, Mathf.MoveTowards funciona de la misma manera.

Vector3.Lerp(a, b, t) es el punto que está a una fracción t del recorrido desde a hasta b: con t = 0.5 está a medio 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 despacio al acercarse al final, acercándose poco a poco en vez de llegar a una velocidad fija. Usa MoveTowards cuando un objeto deba desplazarse a una velocidad fija y detenerse exactamente; usa ese patrón de Lerp para una desaceleración suave.

challenge icon

Desafío

Intermedio

Haz que el dron vuele hasta su plataforma de aterrizaje cuando se pulse la barra espaciadora.

  1. Añade los campos bool flying; y bool landed;. Al pulsar Input.GetKeyDown(KeyCode.Space), establece flying = true;.
  2. Mientras flying && !landed, muévelo con Vector3.MoveTowards(transform.position, pad, speed * Time.deltaTime).
  3. Cuando transform.position == pad, establece landed y registra Landed.

Pulsa «Jugar» y después la barra espaciadora: el dron aterriza en la plataforma. Después, pulsa «Comprobar».

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 Space: vuela hacia pad a velocidad speed y registra Landed una sola vez al llegar
    }
}

Todas las lecciones de Fundamentos de scripting en Unity

Practica por tu cuenta: Playground de Unity