Menu
CoddyTech

Fehlende Komponenten

Teil des Abschnitts Grundlagen des Scripting in Unity der Unity-Journey von Coddy. Lektion 31 von 67.

Wenn die angeforderte Komponente nicht am Objekt vorhanden ist, hält GetComponent dich nicht davon ab. Im Editor gibt es einen Platzhalter zurück, der gleich null ist, und Unity löst eine Ausnahme aus, sobald dein Code ihn verwendet. Dieser Ball sollte hüpfen, wenn die Leertaste gedrückt wird, aber niemand hat ihm ein Rigidbody hinzugefügt:

Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        rb.AddForce(Vector3.up * 300f);
    }
}

Beim Drücken der Leertaste wird MissingComponentException: There is no 'Rigidbody' attached to the "Ball" game object, but a script is trying to access it. ausgegeben. Die Meldung nennt den fehlenden Typ und das Objekt. Füge entweder die Komponente im Inspector hinzu oder frage zuerst danach, wenn das Objekt sie absichtlich nicht haben kann. TryGetComponent(out rb) gibt true zurück und weist rb einen Wert zu, wenn die Komponente vorhanden ist, und gibt false ohne Fehler zurück, wenn sie nicht vorhanden ist (out ermöglicht es der Methode, über die Variable einen Wert zurückzugeben):

bool canHop;

void Start()
{
    canHop = TryGetComponent(out rb);
}

Update() schiebt den Ball dann nur an, if (canHop). Außerhalb des Editors, in einem erstellten Spiel, gibt GetComponent stattdessen ein einfaches null zurück, sodass derselbe Fehler dort als NullReferenceException auftritt.

challenge icon

Aufgabe

Mittel

Mit der Leertaste werden die Straßenlaternen ein- und ausgeschaltet, aber die Glühbirne von Lamp2 ist kaputt: Sie hat kein Light, und beim Drücken der Leertaste wird mit einer MissingComponentException abgebrochen. Korrigiere das Skript:

  • Lampen mit einem Light lassen sich weiterhin mit der Leertaste ein- und ausschalten.
  • Eine Lampe ohne Light greift niemals darauf zu, sodass kein Fehler auftritt.
  • Wenn das Spiel startet, färbt eine Lampe ohne Light ihre Glühbirne mit Color.gray, damit die Spieler sehen können, dass sie kaputt ist.

Drücke Play und dann die Leertaste, um den Fehler zu sehen. Korrigiere ihn und klicke dann auf Check.

Probier es selbst

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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen des Scripting in Unity