2014-09-19 39 views
5

Können Sie mir sagen, wie man von einem anderen Skript auf eine Variable eines Skripts zugreifen kann? Ich habe sogar alles in der Einheitswebseite gelesen, aber ich kann es immer noch nicht tun. Ich weiß, wie ich auf ein anderes Objekt, aber nicht auf eine andere Variable zugreifen kann.Zugreifen auf eine Variable von einem anderen Skript C#

Dies ist die Situation: ich in Skript bin B und ich möchte die Variable X von Skript für den Zugriff auf A. Die Variable X ist boolean. Können Sie mir helfen?

Btw ich muss X Wert immer im Skript aktualisieren B, wie mache ich das? Greifen Sie darauf in Update Funktion Wenn Sie mir geben könnten und Beispiel mit diesen Buchstaben wäre großartig!

Danke

+0

Können Sie Beispielcode für Ihre beiden Skripte hinzufügen? Würde Ihnen helfen, eine Lösung zu finden. –

+0

mögliches Duplikat von [In Unity, wie kann ich Werte von einem Skript an ein anderes übergeben?] (Http: // stackoverflow.com/questions/13891892/in-unity-wie-kann-ich-pass-values-from-one-script-to-anderen) – Heisenbug

Antwort

10

Als erstes müssen Sie die Skriptkomponente der Variablen bekommen, und wenn sie sich in verschiedenen Spielobjekte sind, werden Sie das Spiel-Objekt als Referenz im Inspektor übergeben müssen.

Zum Beispiel habe ich scriptA.cs in GameObject A und scriptB.cs in GameObject B:

scriptA.cs

// make sure its type is public so you can access it later on 
public bool X = false; 

scriptB.cs

public GameObject a; // you will need this if scriptB is in another GameObject 
        // if not, you can omit this 
        // you'll realize in the inspector a field GameObject will appear 
        // assign it just by dragging the game object there 
public scriptA script; // this will be the container of the script 

void Start(){ 
    // first you need to get the script component from game object A 
    // getComponent can get any components, rigidbody, collider, etc from a game object 
    // giving it <scriptA> meaning you want to get a component with type scriptA 
    // note that if your script is not from another game object, you don't need "a." 
    // script = a.gameObject.getComponent<scriptA>(); <-- this is a bit wrong, thanks to user2320445 for spotting that 
    // don't need .gameObject because a itself is already a gameObject 
    script = a.getComponent<scriptA>(); 
} 

void Update(){ 
    // and you can access the variable like this 
    // even modifying it works 
    script.X = true; 
} 
+0

Sollte der Weg zu 'X' mit 'script.X = true;' eher sein als 'scriptA.X = true;'? Du kannst nicht auf 'X' zugreifen, wenn es nicht 'statisch' ist. – DarkCygnus

+1

@GrayCygnus Whoops du hast meinen Fehler entdeckt. Danke, ich habe es behoben. –

1

nur für den ersten Abschluss Antwort

gibt es keine Notwendigkeit für a.gameObject.getComponent<scriptA>();
a ist bereits ein Spiel Objekt so wird dies
tun a.getComponent<scriptA>();
und wenn die Variable, die Sie zugreifen möchten, in den Kindern des Spiels Objekt ist, sollten Sie a.GetComponentInChildren<scriptA>();
verwenden und wenn Sie eine Variable davon oder eine Methode benötigen, können Sie darauf zugreifen
a.GetComponentInChildren<scriptA>().nameofyourvar; a.GetComponentInChildren<scriptA>().nameofyourmethod(Methodparams);

+0

danke für die Korrektur, das habe ich verpasst. –

0

Sie können statische hier verwenden.

hier ist das Beispiel:

ScriptA.cs

Class ScriptA : MonoBehaviour{ 
public static bool X = false; 
} 

ScriptB.cs

Class ScriptB : MonoBehaviour{ 
void Update() { 
    bool AccesingX = ScriptA.X; 
    // or you can do this also 
    ScriptA.X = true; 
} 
} 

für weitere Einzelheiten, Sie Singletonklasse beziehen.

Verwandte Themen