Jump to content
Unity Insider Forum

Probleme bei Referenzen zu Gameobjekten in zwei Funktionen.


Xammex

Recommended Posts

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

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

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

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

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

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

Archiviert

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

×
×
  • Neu erstellen...