【发布时间】:2018-11-28 15:14:54
【问题描述】:
我对编程非常陌生,所以请耐心等待。
public void clickWood()
{
//Check If The Player Has Gotten Wood Previously
if(_hasWood == false)
{
GameObject newItem = Instantiate(wood_prefab) as GameObject;
//Initial Displayed Name
newItem.GetComponent<ButtonSetter>().setName("WOOD: ");
//Starts with 0 Wood, set to 1
newItem.GetComponent<ButtonSetter>().item_count += 1;
newItem.transform.SetParent(GameObject.Find("Content").transform,false);
//Got their first wood, should run else from now on
_hasWood = true;
}
else
{
//SEE CONTINUED POST
}
}
所以,在 else 语句中,我想说的是,
他们获得了第一块木材,因此我们创建了一个面板来显示有关他们拥有的木材的信息。现在我想说,既然我们已经实例化了 displayPanel,我们只想从中工作并调整控制“Wood: 0”整数部分的对象变量
这应该是
newItem.GetComponent<ButtonSetter>().item_count
但是如果我尝试在 else 语句中访问它,如图所示:
newItem.GetComponent<ButtonSetter>().item_count += 1;
它告诉我 newItem 在当前上下文中不存在。 如何在某些条件下实例化某些东西,然后在满足条件后,获取实例化对象并使用其脚本/变量?
【问题讨论】:
-
将
newItem存储到对象的字段中,就像将_hasWood作为字段一样。 -
要详细说明@ChrisSinclair 点,您的
GameObject newItem = Instantiate(wood_prefab) as GameObject;属于if 块的范围。那么为什么不在 if 块之前放置 newItem GameObject 引用并将对象实例化保留在 if 块中。GameObject newItem = null和newItem = Instantiate(wood_prefab) as GameObject;
标签: c# unity3d instantiation