Eksik Bileşenler
Coddy'nin Unity Journey'sinin Unity'de Script Yazmanın Temelleri bölümünün bir parçası. Ders 45 / 85.
İstediğiniz bileşen nesnede yoksa GetComponent sizi durdurmaz. Editor'da, null ile eşit kabul edilen bir vekil döndürür ve kodunuz bu vekili ilk kez kullandığında Unity hata verir. Bu top, Space tuşuna basıldığında zıplamalı, ancak 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ıldığında MissingComponentException: There is no 'Rigidbody' attached to the "Ball" game object, but a script is trying to access it. mesajı görünür. Mesaj, eksik türü ve nesneyi belirtir. Bileşeni Inspector'dan ekleyin ya da nesnede bilerek bulunmayabileceği durumlarda önce var olup olmadığını kontrol edin. Bileşen varsa TryGetComponent(out rb) 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) koşulu sağlandığında iter. Editor dışında, derlenmiş bir oyunda GetComponent bunun yerine sıradan bir null döndürür; bu nedenle aynı hata orada NullReferenceException olarak ortaya çıkar.
Görev
OrtaLamp2'de Light yok: Space tuşunun onu atlamasını ve bozuk olduğunu göstermesini sağla.
Start()içindeGetComponentsatırını,bool hasBulb;alanıyla birliktehasBulb = TryGetComponent(out bulb);olarak değiştir.hasBulbfalse olduğunda lambayı renklendir:GetComponent<Renderer>().material.color = Color.gray;.Update()içinde ışığı yalnızcahasBulbtrue olduğunda değiştir.
“Oyna”'ya bas ve Space tuşuna bas: çalışan lambalar hata vermeden değişir. Ardından “Kontrol et”.
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;
}
}
}
Unity'de Script Yazmanın Temelleri bölümündeki tüm dersler
1Unity'de C# Temelleri
Merhaba, UnityDeğişkenlerOndalık Sayılar için f GerekirKonsolda MetinHatırlayan DeğişkenlerEğer ve DeğilseSayıları KarşılaştırmaTekrar: Coin Collector4Girdi
Basılı, Basılı Tutulmuş, BırakılmışEksenlerAdlandırılmış DüğmelerFare DüğmeleriTekrar: Zıplama Yükleme7Döngüler ve Metotlar
for ile tekrarlamaİç içe döngülerBir metot yazmaYanıt veren metotlarDizilerTekrar: Merdiven10Nesneleri Bulma
Ada Göre BulEtiketlerTüre Göre BulReferanslar Bulmaktan İyidirUnity'de NullÖzet: En Yakın Madeni Para13Proje: Bloklardan Kaç
KoşucuGökyüzünden Bloklar5Vektörler
Vektörleri ToplamaYönlerYerel ve Dünya UzayıÇapraz HızNesneler Arasındaki MesafeVector3 Bir Struct'tırTekrar: Drone Pilotu8GameObject'ler ve Bileşenler
Inspector'daki ReferanslarBir Bileşen AlEksik BileşenlerBileşen EkleRequireComponentGöster ve GizleÖzet: Işık Anahtarı3Inspector
Inspector AlanlarıSerializeFieldOndalıklı Sayılar ve MathfInspector ÖzellikleriTekrar: Asansör6Dönüşümler ve Hiyerarşi
Ebeveynler ve ÇocuklarBayrağı Göndere ÇekÖlçekNesnelere BakBir Noktaya Doğru Hareket EtTekrar: Yörüngedeki Ay9Proje: Yıldızı Yakala
YakalayıcıDüşen Bir YıldızKendi başına pratik yap: Unity playground