Menu
CoddyTech

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.

quiz iconSprawdź się

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