Auf einen Punkt zubewegen
Teil des Abschnitts Unity-Scripting: Grundlagen der Unity-Journey von Coddy. Lektion 35 von 85.
Vector3.MoveTowards(current, target, maxStep) gibt einen Punkt zurück, der höchstens um maxStep näher an target liegt. Wenn das Ziel näher ist, gibt die Methode 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 hält genau am Ziel an. Diese Seilbahn fährt 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 sich um den Anteil t des Weges von a nach b befindet: 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: anfangs schnell, gegen Ende immer langsamer. Es nähert sich schrittweise dem Ziel, statt mit einer festgelegten Geschwindigkeit dort anzukommen. Verwende MoveTowards, wenn sich ein Objekt mit einer festgelegten Geschwindigkeit bewegen und genau am Ziel anhalten muss; verwende dieses Lerp-Muster für ein sanftes Abbremsen.
Aufgabe
MittelFliege die Drohne zum Landeplatz, wenn die Leertaste gedrückt wird.
- Füge die Felder
bool flying;undbool landed;hinzu. Setze beiInput.GetKeyDown(KeyCode.Space)flying = true;. - Bewege dich, solange
flying && !landed, mitVector3.MoveTowards(transform.position, pad, speed * Time.deltaTime). - Wenn
transform.position == pad, setzelandedund protokolliereLanded.
Drücke „Spielen“ und dann die Leertaste: Die Drohne landet auf dem Landeplatz. Drücke anschließend „Prüfen“.
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 Ankunft einmal Landed protokollieren
}
}
Alle Lektionen in Unity-Scripting: Grundlagen
1C#-Grundlagen in Unity
Hallo, UnityVariablenDezimalzahlen brauchen ein fText in der KonsoleVariablen, die sich etwas merkenIf und ElseZahlen vergleichenRückblick: Münzsammler7Schleifen und Methoden
Wiederholen mit forSchleifen in SchleifenEine Methode schreibenMethoden mit RückgabewertArraysRückblick: Treppe10Dinge finden
Nach Namen suchenTagsNach Typ suchenReferenzen schlagen SuchenUnitys NullRückblick: nächste Münze13Projekt: Weiche den Blöcken aus
Der LäuferBlöcke vom Himmel2Bring es in Bewegung
Platziere den WürfelBewege ihn in jedem FrameDrehe ihn jede SekundeSteuere mit den TastenRückblick: Fahre den Würfel5Vektoren
Vektoren addierenRichtungenLokaler und globaler RaumDiagonale GeschwindigkeitAbstand zwischen ObjektenVector3 ist eine StrukturRückblick: Drohnenpilot8GameObjects und Komponenten
Referenzen im InspectorEine Komponente abrufenFehlende KomponentenEine Komponente hinzufügenRequireComponentEin- und AusblendenRückblick: Lichtschalter11Prefabs und Erzeugen von Instanzen
Prefabs und InstantiateNach Zeitintervall erzeugenIn einem Raster erzeugenListen von ObjektenDas Neueste zurücknehmenZerstörenZufälliges ErzeugenRückblick: Feuerwerk14Abschließende Herausforderungen
MünzmagnetDie Straße überquerenStraßenverkehrTurmbauerLanden oder verfehlen3Der Inspector
Inspector-FelderSerializeFieldFließkommazahlen und MathfInspector-AttributeRückblick: Aufzug6Transformationen und Hierarchie
Eltern und KinderHisse die FlaggeSkalierungDinge anschauenAuf einen Punkt zubewegenRückblick: Mond in Umlaufbahn9Projekt: Fang den Stern
Der FängerEin fallender Stern12Der Lebenszyklus eines Skripts
Awake und StartUpdate und LateUpdateOnEnable und OnDisableDie Reihenfolge im LebenszyklusRückblick: Lifecycle LoggerÜbe selbstständig: Unity-Playground