Xammex Geschrieben 23. Februar 2021 Melden Share Geschrieben 23. Februar 2021 Hi ich habe ein Problem und zwar habe ich zwei Scripte. ScriptA ruft eine Methode aus ScriptB auf und in dieser Methode in ScriptB soll unter anderem auch ein Panel aktiv gesetzt und ein Text geändert werden. Die Referenzen zu den einzelnen Objekten sind in ScriptB vorhanden. Soweit so gut nur wenn ich in Playmode gehe und den Button drücke der diese Methode aus ScriptA aufruft sagt er mir das er die Referenz zu dem Panel Transform und dem Text nicht finden kann.. sieht ca so aus class A public void Connect() { B.ConnectToMaster(); } class B public Text t; public Transform panel; (Zuordnung direkt im Inspector) public void ConnectingToMaster() { bla bla bla bla bla bla andere Aufrufe panel.gameobject.setactiv true; t.Text = "bla bla"; } sobald ich die beiden Sachen rausnehme klappt der Rest wieder ohne Probleme und auch der Zugriff auf Text und Panel aus Script B ist kein Problem. Könnte mir da jemand sagen woran es liegen könnte? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Peanut Geschrieben 23. Februar 2021 Melden Share Geschrieben 23. Februar 2021 Naja wenn ich nicht komplett falsch liege musst du noch in der Klasse A die Klasse B Referenzieren um überhaupt die Methode aufrufen zu können. Ich würde dir empfehlen TextMeshPro zu benutzten das müsste in den neueren Versionen an sich schon in Unity sein. Das Package bietet halt viele Vorteile. Gruß von der Nuss :3 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Xammex Geschrieben 23. Februar 2021 Autor Melden Share Geschrieben 23. Februar 2021 das habe ich natürlich gemacht. Die Methode wird ja auch aufgerufen und dabei kommt der Referenzfehler. Nehme ich die beiden Sachen aus der Methode raus läuft auch alles ohne weitere Probleme. danke dir Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 23. Februar 2021 Melden Share Geschrieben 23. Februar 2021 vor 2 Stunden schrieb Xammex: public Text t; public Transform panel; (Zuordnung direkt im Inspector) 👍 Mich wundert das hier: public void Connect() { B.ConnectToMaster(); } Das suggeriert, dass du kein "B"-Objekt referenzierst, sondern eine statische Methode in der B-Klasse aufrufst. Du hast ja auch nicht so etwas wie public B B; // Zuweisung im Inspektor mitgeschrieben. Die Methode ConnectToMaster ist allerdings nicht statisch. Das sollte also so, wie du es gepostet hast, gar nicht erst kompilieren. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Xammex Geschrieben 23. Februar 2021 Autor Melden Share Geschrieben 23. Februar 2021 Danke für die Antwort. ich konnte nicht das komplette Script Posten da ich auf der Arbeit bin und der Code zu Haus auf meinem Rechner ich hab natürlich eine Referenz zu Script B in A habe ich ScriptB B = new ScriptB... wie bereits gesagt ich kann auch ohne Probleme von A auf B zugreifen sofern ich den Text und das Panel ausklammere.. sobald das wieder Aktiv ist kommt der Referenz Fehler, wenn ich in B selbst die Methode ausführe geht es auch mit Panel und Text. Somit können die Referenzen nicht so falsch sein. Ich habe das Gefühl das geht irgendwie beim Aufruf durch A verloren. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 23. Februar 2021 Melden Share Geschrieben 23. Februar 2021 Da geht nix verloren, aber du hast zum Glück bereits das Problem gepostet: vor 7 Minuten schrieb Xammex: ScriptB B = new ScriptB... Zum einen soll man MonoBehaviours niemals mit new erzeugen, zum anderen kann dein neu erzeugtes ScriptB die Referenzen, die du im Editor gesetzt hast, gar nicht kennen. Die sind ja dem Objekt bekannt, das du im Editor gebaut hast, indem du es auf ein GameObject gezogen hast. Dein neu erzeugtes Objekt ist aber ein ganz anderes und hat deshalb nicht dieselben Werte. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Xammex Geschrieben 23. Februar 2021 Autor Melden Share Geschrieben 23. Februar 2021 ahh das macht natürlich Sinn. Darum wird auch der Restliche Code ausgeführt. dann werde ich mit GetComponent arbeiten müssen oder? Vielen dank dafür. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 23. Februar 2021 Melden Share Geschrieben 23. Februar 2021 vor 1 Minute schrieb Xammex: dann werde ich mit GetComponent arbeiten müssen oder? Kommt ehrlich gesagt darauf an. Du kannst auch ein Feld public ScriptB B; machen und dann da wieder dein ScriptB-Objekt reinziehen, so wie du in dein ScriptB die Unity-Komponenten reingezogen hast. Was die beste Lösung ist, kommt auf den Kontext an. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Xammex Geschrieben 23. Februar 2021 Autor Melden Share Geschrieben 23. Februar 2021 das wird auch gehen wird wohl auch genau so gut sein da das ganze nur 1x im Game zu finden ist. 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.