如何获取本地对象变量
How to get local Object Variable
目前我使用 C# 在 Unity 中开发一些东西。
假设我定义了下面的变量,这些脚本在同一个文件中,Orange 是 Prefab :
private GameObject orange;
private GameObject avocado;
然后,我想access/get它是Object by Name/String(因为以后的开发会用到很多Dynamic Variable) ,我已经尝试使用 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;
}
上面的代码会给我错误:“对象引用未设置到对象的实例”,这意味着它仍然没有得到橙色对象。
有什么想法或建议吗?
根据问题评论中的建议。我找到了答案,更改:
GameObject orangeObj = (GameObject) this.GetType().GetField("orange").GetValue(this);
至
GameObject orangeObj = (GameObject) this.GetType().GetField("orange", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this);
目前我使用 C# 在 Unity 中开发一些东西。
假设我定义了下面的变量,这些脚本在同一个文件中,Orange 是 Prefab :
private GameObject orange;
private GameObject avocado;
然后,我想access/get它是Object by Name/String(因为以后的开发会用到很多Dynamic Variable) ,我已经尝试使用 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;
}
上面的代码会给我错误:“对象引用未设置到对象的实例”,这意味着它仍然没有得到橙色对象。
有什么想法或建议吗?
根据问题评论中的建议。我找到了答案,更改:
GameObject orangeObj = (GameObject) this.GetType().GetField("orange").GetValue(this);
至
GameObject orangeObj = (GameObject) this.GetType().GetField("orange", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(this);