Update und LateUpdate
Teil des Abschnitts Unity-Scripting: Grundlagen der Unity-Journey von Coddy. Lektion 71 von 85.
In jedem Frame ruft Unity für jedes Skript Update() auf. Erst wenn alle damit fertig sind, ruft Unity für jedes Skript LateUpdate() auf. Du kannst nicht festlegen, welches Objekt zuerst sein Update() ausführt.
Das ist für alles wichtig, was auf etwas anderem aufbaut. Eine Kamera, die die Position des Spielers in Update() übernimmt, wird möglicherweise ausgeführt, bevor das eigene Update() des Spielers ihn bewegt hat. Dann übernimmt sie die Position des Spielers von vor einem Frame: Die Kamera hinkt einen Schritt hinterher, und ob das passiert, kann sich ändern, wenn Objekte hinzugefügt oder die Szene neu geladen wird. In LateUpdate() erfolgt das Übernehmen immer, nachdem sich der Spieler bewegt hat:
public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);
void LateUpdate()
{
transform.position = player.position + offset;
}Die Regel: Bewege Dinge in Update() und platziere Code, der darauf reagiert, wo Dinge gelandet sind, etwa Kameras, Beschriftungen und das Zielen, in LateUpdate(). Beide werden einmal pro Frame ausgeführt, und Time.deltaTime bedeutet in beiden dasselbe.
Aufgabe
MittelLass das Namensschild in jedem Frame genau über dem Spieler sitzen.
- Füge
void LateUpdate()hinzu, das nach demUpdate()jedes Skripts ausgeführt wird. - Verschiebe den Teil
if (target != null)dorthin und lass inUpdate()nur die Pfeilbewegung unterif (target == null).
Drücke „Spielen“ und halte eine Pfeiltaste gedrückt: Das Schild bleibt direkt über dem Spieler. Drücke dann „Prüfen“.
Probier es selbst
using UnityEngine;
public class Mover : MonoBehaviour
{
public Transform target;
public Vector3 offset;
public float speed = 4f;
void Update()
{
if (target != null)
{
transform.position = target.position + offset;
}
else
{
if (Input.GetKey(KeyCode.RightArrow))
{
transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
}
}
}
}
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