2014-09-19 63 views
5

Puoi dirmi come accedere a una variabile di uno script da un altro script? Ho persino letto tutto sul sito web dell'unità, ma non riesco ancora a farlo. So come accedere a un altro oggetto ma non a un'altra variabile.Accesso a una variabile da un altro script C#

Questa è la situazione: Sono in sceneggiatura B e voglio accedere alla variabile X dallo script A. La variabile X è boolean. Potete aiutarmi?

Btw ho bisogno di aggiornare il valore X nello script B, come faccio? Accedilo nella funzione Update Se potessi darmi ed esempio con queste lettere sarebbe fantastico!

Grazie

+0

Potresti aggiungere qualche codice di esempio dei tuoi due script? Sarebbe di aiuto nel fornirti una soluzione. –

+0

possibile duplicato di [In Unity, come posso passare i valori da uno script a un altro?] (Http: // StackOverflow.it/questions/13891892/in-unity-how-can-i-pass-values-da-one-script-a-another) – Heisenbug

risposta

10

Innanzitutto è necessario per ottenere il componente script della variabile, e se sono in diversi oggetti di gioco, è necessario passare l'oggetto del gioco come riferimento nella finestra di ispezione.

Ad esempio, ho scriptA.cs in GameObject A e 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

Il modo di accedere a 'X' essere con' script.X = true; 'piuttosto di 'scriptA.X = true;'? Non puoi accedere a 'X' in questo modo se non è' statico' – DarkCygnus

+1

@GrayCygnus whoops hai individuato il mio errore. Grazie, l'ho risolto –

1

solo per completare il primo rispondi

non v'è alcuna necessità di a.gameObject.getComponent<scriptA>();
a è già un oggetto di gioco in modo che questo farà
a.getComponent<scriptA>();
e se la variabile che si sta tentando di accedere è nei bambini dell'oggetto gioco si dovrebbe usare a.GetComponentInChildren<scriptA>();
e se hai bisogno di una variabile o di un metodo puoi accedervi in ​​questo modo
a.GetComponentInChildren<scriptA>().nameofyourvar; a.GetComponentInChildren<scriptA>().nameofyourmethod(Methodparams);

+0

grazie per la correzione, mi sono perso. –

0

Qui puoi utilizzare l'elettricità statica.

qui è l'esempio:

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; 
} 
} 

per maggiori dettagli, è possibile consultare classe Singleton.

Problemi correlati