Brakujące komponenty
Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 45 z 85.
Gdy komponent, o który prosisz, nie znajduje się na obiekcie, GetComponent nie zatrzymuje programu. W Edytorze zwraca atrapę, która porównuje się jako null, a Unity zgłasza błąd przy pierwszym użyciu jej w kodzie. Ta piłka powinna podskoczyć po naciśnięciu spacji, ale nikt nie dodał do niej komponentu Rigidbody:
Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb.AddForce(Vector3.up * 300f);
}
}Naciśnięcie spacji wyświetla komunikat MissingComponentException: There is no 'Rigidbody' attached to the "Ball" game object, but a script is trying to access it. Komunikat podaje nazwę brakującego typu i obiektu. Dodaj komponent w Inspektorze albo, jeśli obiekt może celowo go nie mieć, najpierw to sprawdź. TryGetComponent(out rb) zwraca true i przypisuje wartość do rb, gdy komponent jest obecny, a w przeciwnym razie zwraca false bez błędu (out pozwala metodzie przekazać wartość z powrotem przez zmienną):
bool canHop;
void Start()
{
canHop = TryGetComponent(out rb);
}Funkcja Update() popycha wtedy piłkę tylko if (canHop). Poza Edytorem, w zbudowanej grze, GetComponent zwraca zamiast tego zwykłe null, więc ten sam błąd objawia się tam jako NullReferenceException.
Wyzwanie
ŚredniLamp2 nie ma komponentu Light: spraw, by Space go pomijał, i pokaż, że jest zepsuta.
- W
Start()zastąp wierszGetComponentkodemhasBulb = TryGetComponent(out bulb);i dodaj polebool hasBulb;. - Gdy
hasBulbma wartość false, zmień kolor lampy:GetComponent<Renderer>().material.color = Color.gray;. - W
Update()przełączaj światło tylko wtedy, gdyhasBulbma wartość true.
Naciśnij „Graj” i naciśnij Space: sprawne lampy się przełączą, bez błędu. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
using UnityEngine;
public class LampSwitch : MonoBehaviour
{
Light bulb;
void Start()
{
bulb = GetComponent<Light>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
bulb.enabled = !bulb.enabled;
}
}
}
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łaPoćwicz samodzielnie: Edytor online Unity