Eksik Bileşenler
Coddy'nin Unity Journey'sinin Unity'de Script Yazmanın Temelleri bölümünün bir parçası. Ders 31 / 67.
İstediğin bileşen nesnede yoksa GetComponent seni durdurmaz. Editor'da null ile eşit kabul edilen bir yer tutucu döndürür ve kodun bu değeri ilk kullandığında Unity hata verir. Bu top, Space'e basıldığında zıplamalı; ama ona kimse bir Rigidbody eklememiş:
Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
rb.AddForce(Vector3.up * 300f);
}
}Space'e basınca MissingComponentException: There is no 'Rigidbody' attached to the "Ball" game object, but a script is trying to access it. yazdırılır. Mesajda eksik tür ve nesne belirtilir. Bileşeni Inspector'da ekle ya da nesnede bilerek bulunmayabileceği durumlarda önce kontrol et. TryGetComponent(out rb), bileşen varsa true döndürür ve rb'yi doldurur; yoksa hata vermeden false döndürür (out, yöntemin bir değeri değişken üzerinden geri vermesini sağlar):
bool canHop;
void Start()
{
canHop = TryGetComponent(out rb);
}Update() daha sonra topu yalnızca if (canHop) olduğunda iter. Editor dışında, derlenmiş oyunda GetComponent bunun yerine sıradan bir null döndürür; bu nedenle aynı hata orada NullReferenceException olarak ortaya çıkar.
Görev
OrtaBoşluk tuşu sokak lambalarını yakıp söndürür, ancak Lamp2'nin ampulü bozuktur: Light bileşeni yoktur ve Boşluk tuşuna basınca MissingComponentException hatası oluşur. Betiği düzelt:
- Light bileşeni olan lambalar Boşluk tuşuyla yanıp sönmeye devam etsin.
- Light bileşeni olmayan bir lamba ona asla dokunmasın; böylece hata oluşmasın.
- Oyun başladığında, Light bileşeni olmayan bir lamba ampulünü
Color.grayrengine boyasın; böylece oyuncular lambanın bozuk olduğunu görebilsin.
Hatayı görmek için Play'e, ardından Boşluk tuşuna bas. Düzelt, sonra Check'e bas.
Kendin dene
using UnityEngine;
public class LampSwitch : MonoBehaviour
{
Light bulb;
void Start()
{
bulb = GetComponent<Light>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
bulb.enabled = !bulb.enabled;
}
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Unity'de Script Yazmanın Temelleri bölümündeki tüm dersler
1İlk Betiğiniz
Merhaba, UnityKüpü YerleştirHer Karede Hareket EtHer Saniye DönTuşlarla Yön VerÖzet: Küpü Sür4Vektörler
Vektörleri ToplamaYönlerYerel ve Dünya UzayıÇapraz HızNesneler Arasındaki MesafeVector3 Bir YapıdırÖzet: Drone Pilotu7Proje: Yıldızı Yakala
YakalayıcıDüşen Bir Yıldız5Dönüşümler ve Hiyerarşi
Ebeveynler ve ÇocuklarÖlçekNesnelere BakışBir Noktaya Doğru HareketTekrar: Yörüngedeki Ay6GameObject'ler ve Bileşenler
Inspector'daki ReferanslarBir Bileşen AlEksik BileşenlerBir Bileşen EkleRequireComponentGöster ve GizleÖzet: Işık Anahtarı