Pouvez-vous me dire comment accéder à une variable d'un script à partir d'un autre script? J'ai même tout lu sur le site Web de l'unité mais je ne peux toujours pas le faire. Je sais comment accéder à un autre objet mais pas à une autre variable.
Voici la situation: Je suis dans le scriptBet je souhaite accéder à la variable X
à partir du scriptA. La variable X
est boolean
name __. Pouvez-vous m'aider?
Btw j’ai besoin de mettre à jour la valeur de X
name __ dans le scriptB, comment puis-je le faire? Accédez-y via la fonction Update
Si vous pouviez me donner un exemple avec ces lettres, ce serait génial!
Je vous remercie
Vous devez d’abord obtenir le composant de script de la variable, et s’ils se trouvent dans des objets de jeu différents, vous devez passer l’objet de jeu comme référence dans l’inspecteur.
Par exemple, j'ai scriptA.cs
dans GameObject A
et scriptB.cs
dans 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;
}
Vous pouvez utiliser statique ici.
voici l'exemple:
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;
}
}
pour plus de détails, vous pouvez vous référer à la classe singleton.
juste pour compléter la première réponse
il n'y a pas besoin de
a.gameObject.getComponent<scriptA>();
a
est déjà un GameObject
donc cela fera
a.getComponent<scriptA>();
et si la variable à laquelle vous essayez d'accéder est chez les enfants de GameObject
, vous devez utiliser
a.GetComponentInChildren<scriptA>();
et si vous avez besoin d'une variable ou d'une méthode, vous pouvez y accéder comme ceci
a.GetComponentInChildren<scriptA>().nameofyourvar;
a.GetComponentInChildren<scriptA>().nameofyourmethod(Methodparams);