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.
Aufgabe
MittelDie 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
}
}
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
1Dein erstes Skript
Hallo, UnityPlatziere den WürfelBewege dich in jedem FrameDrehe dich jede SekundeSteuere mit den TastenRückblick: Steuere den Würfel4Vektoren
Vektoren addierenRichtungenLokaler und globaler RaumDiagonale GeschwindigkeitAbstand zwischen ObjektenVector3 ist ein StructRückblick: Drohnenpilot7Projekt: Fang den Stern
Der FängerEin fallender Stern10Der Lebenszyklus eines Skripts
Awake und StartUpdate und LateUpdateOnEnable und OnDisableDie Reihenfolge im LebenszyklusRückblick: Lifecycle Logger5Transformationen und Hierarchie
Eltern und KinderSkalierungDinge ansehenAuf einen Punkt zubewegenRückblick: Umlaufender Mond8Dinge finden
Nach Namen findenTagsNach Typ findenReferenzen schlagen FindUnitys NullRückblick: Nächste Münze11Projekt: Weiche den Blöcken aus
Der LäuferFallende Blöcke6GameObjects und Komponenten
Referenzen im InspectorEine Komponente abrufenFehlende KomponentenEine Komponente hinzufügenRequireComponentEin- und AusblendenRückblick: Lichtschalter