2017-07-22 33 views
0

目前我使用C#在Unity中开发了一些东西。如何使用c获取本地对象变量#

比方说,我有在下面定义的变量,这些脚本是在同一个文件和橙色是预制

private GameObject orange; 
private GameObject avocado; 

然后,我想访问/得到它的对象通过名称/字符串 (因为未来的发展将使用很多动态变量),我已经尝试过使用GetType()但没有运气,例如:

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; 

} 

上面的代码会给我错误:“对象引用未设置为对象的实例”,这意味着它仍然没有得到橙色的对象。

任何想法或建议?

+0

@RomanoZumbé我尝试阅读/访问'橙Prefab'的字符串,但如果你有更好的方法,请让我知道... – anunixercoder

+0

@RomanoZumbé不能这样。在'Start()'方法中,我想通过字符串获得Orange'GameObject'。在未来,它将是动态的。即“葡萄”,“鳄梨”等...... – anunixercoder

+0

“GetField”默认只获取公共静态和实例字段。你需要专门告诉它寻找私人领域:https://stackoverflow.com/questions/95910/find-a-private-field-with-reflection/95973#95973 – 31eee384

回答

1

通过问题评论中的建议。我找到了答案,更改:

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

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