2017-07-22 5 views
0

Derzeit entwickle ich etwas in Unity mit C#.So erhalten Sie lokale Objektvariable mit C#

Lassen Sie uns sagen, dass ich unter Variable definieren, diese Skript in derselben Datei und Orange ist Prefab:

private GameObject orange; 
private GameObject avocado; 

dann möchte ich Zugang/get es Object von Name/String (Da zukünftige Entwicklung viele dynamische Variable verwenden wird), habe ich es versucht, GetType() aber kein Glück, zum Beispiel:

void Awake() { 

orange = (GameObject)Resources.Load ("fruits/Orange", typeof(GameObject)); //getting Orange Prefab 
avocado = (GameObject)Resources.Load ("fruits/Avocado", typeof(GameObject)); //getting Avocado Prefab 

} 

void Start() { 

//Here, i try to get orange/avocado/other fruitname by string 
GameObject orangeObj = (GameObject) this.GetType().GetField("orange").GetValue(this); 

GameObject _orange = Instantiate (orangeObj, new Vector3 (elem_1_pos_x, elem_1_pos_y, 0), Quaternion.identity) as GameObject; 

} 

Der obige Code gibt mir einen Fehler: "Object Reference nicht auf eine Instanz eines Objekts gesetzt" was bedeutet, dass es immer noch nicht das orange Objekt bekommt.

Irgendeine Idee oder Vorschlag?

+0

@ RomanoZumbé ich versuche zu lesen/Zugang 'orange Prefab' durch Zeichenfolge, aber wenn Sie bessere Methode haben, bitte lassen Sie mich wissen ... – anunixercoder

+0

@ RomanoZumbé kann nicht so sein. in 'Start()' Methode, ich möchte Orange 'GameObject' durch Zeichenfolge erhalten. In Zukunft wird es dynamisch sein. d. h. "traube", "avocado", etc ... – anunixercoder

+0

"GetField" erhält nur öffentliche statische und Instanzfelder standardmäßig. Sie müssen es ausdrücklich sagen, um nach privaten Feldern zu suchen: https://stackoverflow.com/questions/95910/find-a-private-field-with-reflection/95973#95973 – 31eee384

Antwort

1

Durch Vorschlag in Fragen Kommentar. Ich fand eine Antwort, Änderung:

GameObject orangeObj = (GameObject) this.GetType().GetField("orange").GetValue(this); 

zu

GameObject orangeObj = (GameObject) this.GetType().GetField("orange", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this); 
Verwandte Themen