Menu
CoddyTech

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.

challenge icon

Görev

Orta

Boş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.gray rengine 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;
        }
    }
}
quiz iconKendini test et

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