Menu
CoddyTech

Auf einen Punkt zubewegen

Teil des Abschnitts Grundlagen des Scripting in Unity der Unity-Journey von Coddy. Lektion 27 von 67.

Vector3.MoveTowards(current, target, maxStep) gibt einen Punkt zurück, der höchstens maxStep näher an target liegt. Ist das Ziel näher als dieser Abstand, gibt die Funktion das Ziel selbst zurück, sodass sie niemals darüber hinausschießt. Mit speed * Time.deltaTime als Schritt bewegt sich ein Objekt mit gleichbleibender Geschwindigkeit und kommt genau am Ziel zum Stillstand. Diese Seilbahn gleitet mit 2 Einheiten pro Sekunde zu ihrer Station:

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

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

Sobald sie angekommen ist, gibt jeder spätere Aufruf erneut station zurück, sodass die Seilbahn stehen bleibt und transform.position == station wahr ist. Für eine einzelne Zahl funktioniert Mathf.MoveTowards genauso.

Vector3.Lerp(a, b, t) ist der Punkt, der den Anteil t des Weges von a nach b zurücklegt: Bei t = 0.5 liegt er auf halber Strecke. Wird Lerp(transform.position, station, 2f * Time.deltaTime) in Update() verwendet, legt das Objekt in jedem Frame einen Anteil der verbleibenden Strecke zurück: zuerst schnell, dann gegen Ende immer langsamer. Es nähert sich schrittweise an, statt mit einer festgelegten Geschwindigkeit anzukommen. Verwende MoveTowards, wenn sich ein Objekt mit einer festgelegten Geschwindigkeit bewegen und genau am Ziel anhalten soll; verwende dieses Lerp-Muster für ein sanftes Abbremsen.

challenge icon

Aufgabe

Mittel

Die Drohne wartet in der Luft, bis du die Leertaste drückst. Von da an fliegt sie in einer geraden Linie mit speed Einheiten pro Sekunde zu pad, der Position des Landeplatzes, und landet genau dort. Wenn sie landet, protokolliert sie einmal Landed, nicht danach bei jedem Frame erneut.

Drücke Play, drücke die Leertaste und dann Check.

Probier es selbst

using UnityEngine;

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

    void Update()
    {
        // Nach Space: mit speed zu pad fliegen und bei der Ankunft einmal Landed protokollieren
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen des Scripting in Unity