Kojote Geschrieben 14. Oktober 2019 Melden Share Geschrieben 14. Oktober 2019 Hi! Sagt mal, könnt ihr mal auf die Grafiken einen Blick werfen: 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 More sharing options...
Tyroonis Geschrieben 14. Oktober 2019 Melden Share Geschrieben 14. Oktober 2019 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 More sharing options...
Sascha Geschrieben 14. Oktober 2019 Melden Share Geschrieben 14. Oktober 2019 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 More sharing options...
Kojote Geschrieben 14. Oktober 2019 Autor Melden Share Geschrieben 14. Oktober 2019 Also der Fehler kommt genau bei der Zeile: material = smr.material; Da ich aber eine Zeile vorher ja den SkinnedMeshRenderer finde, frage ich mich, wo sein Problem ist: smr = GetComponentInChildren<SkinnedMeshRenderer>(); Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 14. Oktober 2019 Melden Share Geschrieben 14. Oktober 2019 Da dein ganzes Objekt deaktiviert ist, schau mal, ob OnEnable überhaupt jemals ausgeführt wird. Ansonsten übergibst du ja true, womit er theoretisch auch deaktivierte Objekte finden kann (sofern der Code überhaupt ausgeführt wird). Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 14. Oktober 2019 Autor Melden Share Geschrieben 14. Oktober 2019 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 More sharing options...
Sascha Geschrieben 15. Oktober 2019 Melden Share Geschrieben 15. Oktober 2019 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 More sharing options...
Kojote Geschrieben 16. Oktober 2019 Autor Melden Share Geschrieben 16. Oktober 2019 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 More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.