Menu
CoddyTech

Porusz się w kierunku punktu

Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 35 z 85.

Vector3.MoveTowards(current, target, maxStep) zwraca punkt oddalony od target o nie więcej niż maxStep. Jeśli cel znajduje się bliżej, zwraca sam cel, więc nigdy go nie przekracza. Gdy krokiem jest speed * Time.deltaTime, obiekt porusza się ze stałą prędkością i zatrzymuje dokładnie na celu. Ten wagonik kolejki linowej płynnie dociera do stacji z prędkością 2 jednostek na sekundę:

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

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

Po dotarciu każda kolejna funkcja wywołania ponownie zwraca station, więc wagonik pozostaje w miejscu, a transform.position == station ma wartość true. W przypadku pojedynczej liczby Mathf.MoveTowards działa tak samo.

Vector3.Lerp(a, b, t) zwraca punkt oddalony o ułamek t drogi od a do b: dla t = 0.5 znajduje się w połowie drogi. Zapisane jako Lerp(transform.position, station, 2f * Time.deltaTime) w Update(), na każdej klatce pokonuje część pozostałej odległości: na początku szybko, a pod koniec coraz wolniej, stopniowo zbliżając się do celu zamiast docierać do niego ze stałą prędkością. Użyj MoveTowards, gdy obiekt ma poruszać się ze stałą prędkością i zatrzymać dokładnie na celu; użyj tego wzorca Lerp, aby uzyskać łagodne zwalnianie.

challenge icon

Wyzwanie

Średni

Skieruj drona na lądowisko po naciśnięciu spacji.

  1. Dodaj pola bool flying; i bool landed;. Po Input.GetKeyDown(KeyCode.Space) ustaw flying = true;.
  2. Gdy flying && !landed, poruszaj się za pomocą Vector3.MoveTowards(transform.position, pad, speed * Time.deltaTime).
  3. Gdy transform.position == pad, ustaw landed i zapisz w logu Landed.

Naciśnij „Graj”, a następnie spację: dron wyląduje na lądowisku. Potem naciśnij „Sprawdź”.

Spróbuj swoich sił

using UnityEngine;

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

    void Update()
    {
        // Po naciśnięciu Space: leć do pad z prędkością speed i zapisz Landed w logu tylko raz po dotarciu
    }
}

Wszystkie lekcje w sekcji Podstawy skryptów w Unity

Poćwicz samodzielnie: Edytor online Unity