Referencje lepsze niż Find
Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 45 z 67.
Skrypt może uzyskać dostęp do innego obiektu na cztery sposoby: przez pole ustawione w Inspectorze, GameObject.Find według nazwy, wyszukiwanie po tagu lub FindAnyObjectByType według typu. W przypadku obiektu, który znajduje się w scenie od samego początku, kod Unity korzysta z pola Inspectora z trzech powodów:
- Szybkość. Odwołanie jest przypisywane przed uruchomieniem gry. Każde wyszukiwanie przeszukuje obiekty sceny, a wyszukiwanie w
Update()odbywa się przy każdej klatce. - Bezpieczeństwo. Nazwa w ciągu znaków przestaje działać, gdy ktoś zmieni nazwę obiektu: Find zwraca
null, a błąd pojawia się później, w dowolnym wierszu, który używa tej wartości. Puste pole Inspectora powoduje błąd UnassignedReferenceException, który wskazuje nazwę pola i skryptu. - Przejrzystość. Inspector pokazuje, od czego zależy skrypt. Wywołanie Find ukrywa tę zależność w kodzie.
// ustawiane raz w Inspectorze: bez wyszukiwania, a zmiana nazwy niczego nie zmienia
[SerializeField] private Transform door;
// wyszukiwane w każdej klatce; po zmianie nazwy drzwi wynik to null
void Update()
{
Transform d = GameObject.Find("Door").transform;
}Wyszukiwanie przydaje się w niektórych sytuacjach: w przypadku obiektów, które istnieją dopiero po uruchomieniu gry, takich jak obiekt utworzony podczas rozgrywki, oraz skryptów, które muszą działać w każdej scenie. Nawet wtedy wyszukaj obiekt raz w Start() i zachowaj wynik w polu.
Spróbuj swoich sił
Ta lekcja nie zawiera wyzwania z kodem.
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy skryptów w Unity
1Twój pierwszy skrypt
Witaj, UnityUmieść sześcianPoruszaj się w każdej klatceObracaj się co sekundęSteruj za pomocą klawiszyPodsumowanie: Prowadź sześcian2Inspektor
Pola inspektoraSerializeFieldLiczby zmiennoprzecinkowe i MathfAtrybuty inspektoraPodsumowanie: Winda5Transformacje i hierarchia
Rodzice i dzieciSkalaPatrz na obiektyPoruszanie się w kierunku punktuPodsumowanie: Księżyc krążący po orbicie8Wyszukiwanie obiektów
Wyszukiwanie po nazwieTagiWyszukiwanie po typieReferencje lepsze niż FindNull w UnityPodsumowanie: najbliższa moneta3Wejście
Naciśnięty, przytrzymany, zwolnionyOsiePrzyciski o nazwachPrzyciski myszyPowtórka: naładowany skok6Obiekty gry i komponenty
Referencje w InspectorzePobieranie komponentuBrakujące komponentyDodawanie komponentuRequireComponentPokazywanie i ukrywaniePodsumowanie: włącznik światła