Update i LateUpdate
Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 71 z 85.
W każdej klatce Unity wywołuje Update() w każdym skrypcie, a dopiero gdy wszystkie zakończą działanie, wywołuje LateUpdate() w każdym skrypcie. To, którego obiektu Update() zostanie wywołane jako pierwsze, nie zależy od ciebie.
Ma to znaczenie w przypadku wszystkiego, co podąża za czymś innym. Kamera, która kopiuje pozycję gracza w Update(), może wykonać się przed własnym Update() gracza, który przesuwa go na nowe miejsce, a wtedy kopiuje pozycję gracza sprzed jednej klatki: kamera pozostaje krok w tyle, a to, czy tak się dzieje, może się zmienić po dodaniu obiektów lub ponownym wczytaniu sceny. W LateUpdate() kopiowanie zawsze odbywa się po przesunięciu gracza:
public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);
void LateUpdate()
{
transform.position = player.position + offset;
}Zasada: przesuwaj obiekty w Update(), a kod reagujący na położenie obiektów po ich przesunięciu, taki jak kod kamery, etykiet i celowania, umieszczaj w LateUpdate(). Obie metody wykonują się raz na klatkę, a Time.deltaTime oznacza to samo w obu.
Wyzwanie
ŚredniSpraw, aby znacznik z nazwą znajdował się dokładnie nad graczem w każdej klatce.
- Dodaj
void LateUpdate(), która uruchamia się poUpdate()każdego skryptu. - Przenieś do niej część
if (target != null), a wUpdate()pozostaw tylko ruch za pomocą strzałek, pod warunkiemif (target == null).
Naciśnij „Graj” i przytrzymaj strzałkę: znacznik pozostaje dokładnie nad graczem. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
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);
}
}
}
}
Wszystkie lekcje w sekcji Podstawy skryptów w Unity
1Podstawy C# w Unity
Witaj, UnityZmienneLiczby dziesiętne wymagają fTekst w konsoliZmienne, które pamiętająIf i elsePorównywanie liczbPowtórka: Zbieracz monet4Wejście
Naciśnięty, przytrzymany, zwolnionyOsiePrzyciski z nazwamiPrzyciski myszyPowtórka: naładowany skok7Pętle i metody
Powtarzaj za pomocą forPętle wewnątrz pętliNapisz metodęMetody, które zwracają wynikTablicePowtórka: schody10Wyszukiwanie obiektów
Wyszukiwanie po nazwieTagiWyszukiwanie po typieReferencje lepsze niż wyszukiwanieNull w UnityPowtórka: najbliższa moneta13Projekt: Unikaj bloków
BiegaczBloki z nieba2Wpraw to w ruch
Umieść sześcianPoruszaj w każdej klatceObracaj co sekundęSteruj za pomocą klawiszyPodsumowanie: Prowadź sześcian5Wektory
Dodawanie wektorówKierunkiPrzestrzeń lokalna i globalnaPrędkość po przekątnejOdległość między obiektamiVector3 to strukturaPodsumowanie: pilot drona8Obiekty gry i komponenty
Referencje w InspectorzePobieranie komponentuBrakujące komponentyDodawanie komponentuRequireComponentPokazywanie i ukrywaniePowtórka: włącznik światła3Inspektor
Pola inspektoraSerializeFieldLiczby zmiennoprzecinkowe i MathfAtrybuty inspektoraPowtórka: winda6Przekształcenia i hierarchia
Rodzice i dzieciWciągnij flagęSkalowaniePatrz na obiektyPorusz się w kierunku punktuPodsumowanie: Księżyc na orbicie12Cykl życia skryptu
Awake i StartUpdate i LateUpdateOnEnable i OnDisableKolejność cyklu życiaPodsumowanie: Rejestrator cyklu życiaPoćwicz samodzielnie: Edytor online Unity