it-swarm.com.de

Zugriff auf eine Variable aus einem anderen Skript C #

Können Sie mir sagen, wie Sie von einem anderen Skript auf eine Variable eines Skripts zugreifen können? Ich habe sogar alles auf der Unity-Website gelesen, kann es aber immer noch nicht. Ich kann auf ein anderes Objekt zugreifen, aber nicht auf eine andere Variable.

Dies ist die Situation: Ich bin im SkriptBund ich möchte auf die Variable X vom SkriptAzugreifen. Die Variable X ist boolean. Können Sie mir helfen?

Übrigens muss ich den Wert von X in SkriptBaufwändig aktualisieren. Wie mache ich das? Greifen Sie darauf in Update Funktion Zu. Wenn Sie mir ein Beispiel geben könnten, wäre das großartig!

Vielen Dank

7
Lorenzo Spoleti

Sie müssen zuerst die Skriptkomponente der Variablen abrufen, und wenn sie sich in verschiedenen Spielobjekten befindet, müssen Sie das Spielobjekt als Referenz im Inspektor übergeben. 

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;
}
14
Jay Kazama

Sie können hier statisch 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;
 }
}

OR

ScriptA.cs

Class ScriptA : MonoBehaviour{

//you are actually creating instance of this class to access variable.
 public static ScriptA instance;

 void Awake(){

     // give reference to created object.
     instance = this;

 }

 // by this way you can access non-static members also.
 public bool X = false;


}

ScriptB.cs

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

für weitere Informationen können Sie auf die Singleton-Klasse verweisen.

1
Kartik Shah

nur um die erste Antwort zu vervollständigen

es besteht keine Notwendigkeit für 

a.gameObject.getComponent<scriptA>();

a ist bereits eine GameObject, also wird dies funktionieren 

a.getComponent<scriptA>();

und wenn sich die Variable, auf die Sie zugreifen möchten, in untergeordneten Variablen der GameObject befindet, die Sie verwenden sollten

a.GetComponentInChildren<scriptA>();

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);
1
Milad Qasemi