Jump to content
Unity Insider Forum

Script findet Komponente nicht


Kojote

Recommended Posts

Hi!

Sagt mal, könnt ihr mal auf die Grafiken einen Blick werfen:

738f4f-1571044244.jpg

577efd-1571044321.jpg

Ich versuche in der OnEnable-Methode einige Komponenten zu finden:

        private void OnEnable() {
            actionTriggerCol = GetComponentInChildren<BoxCollider>(true);
            smr = GetComponentInChildren<SkinnedMeshRenderer>(true);
            material = smr.material;
            col = material.GetColor("_Color");
        }

Laut Inspector wurde alles gefunden, trotzdem bekomme ich ne Fehlermeldung, dass er den SkinnedMeshRenderer nicht findet.

Seht ihr da irgendwo nen Fehler?

Grüße von Kojote

Link zu diesem Kommentar
Auf anderen Seiten teilen

Also ich weiß nicht genau ob es Daran liegt  aber lass mal das true weg.

 

Also:

 private void OnEnable() {
            actionTriggerCol = GetComponentInChildren<BoxCollider>();
            smr = GetComponentInChildren<SkinnedMeshRenderer>();
            material = smr.material;
            col = material.GetColor("_Color");
        }

 

Habe da noch nie ein True rein gemacht

Link zu diesem Kommentar
Auf anderen Seiten teilen

GetComponent (und alle Varianten davon) werfen keinen Fehler, wenn die gesuchte Komponente nicht gefunden wird. Sie geben einfach null zurück. Eine NullReferenceException wird nur dann geworfen, wenn du eine Variable hast, dessen Wert null ist, und du dann mit dem (nicht vorhandenen) Objekt arbeiten willst.

var thing = GetComponent<Thing>(); // Es gibt kein Thing auf diesem GameObject, GetComponent gibt null zurück
thing.DoStuff(); // HIER fliegt eine NullReference- (oder ähnliche) Exception

Eine NullReferenceException kann daher nur dort auftreten, wo du mit Punktnotation oder Indexer auf eine Variable zugreifst:

thing.DoStuff()
thing.someField
thing[index]

Da nichts davon hier der Fall ist, stimmt die Zeilennummer der Exception vermutlich einfach nicht. Speichere mal deinen gesamten Code. Und nur um sicherzugehen, re-importiere ihn nochmal. Probier's dann nochmal aus.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Deswegen ja hier das True, dass sagt, dass auch deaktivierte Komponente gefunden werden:

            actionTriggerCol = GetComponentInChildren<BoxCollider>(true);
            smr = GetComponentInChildren<SkinnedMeshRenderer>(true);

Aber wie gesagt, schau mal auf Bild 2 wars glaub ich, da steht ja im Inspector drin, dass er den SMR gefunden hat. Das wundert mich halt. Er findet ihn, aber drauf zugreifen darf man nicht.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hast meinen Post nicht so richtig gelesen, oder? Es geht darum, wann OnEnable auf dem suchenden Objekt ausgeführt wird. Dass du im Inspektor die Referenz auf den SMR siehst, ist für mich nur ein Hinweis, dass du mehrere Stellen hast, an denen mit dem Wert des Feldes gearbeitet wird. Setzt du den noch irgendwo anders? Zum Beispiel im Inspektor?

Ansonsten schau halt mal, was ein

Debug.Log(smr);

unter der GetComponentInChildren-Zeile sagt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Problem gefunden, in meinem Start-Controler wird über die Awake-Methode das Spawnen der Enemys ausgelöst und muss da auf eine Komponente der Enemys zugreifen. Die Komponenten der Enemys werden aber erst in der OnEnable-Methode der Enemys gesucht. EnEnabe wird aber erst nach der Start-Methode aktiv. Also ist der Fehler schon ganz richtig. Ich versuche erst einen Zugriff drauf, danach werden sie gefunden und im Inspector richtig angezeigt. Eigentlich logisch und ein total bescheuerter Fehler. 🤪

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...