c# - (C#) 在条件下实例化,否则重用
问题描述
我对编程非常陌生,所以请耐心等待。
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 在当前上下文中不存在。如何在某些条件下实例化某些东西,然后在满足条件后,获取实例化对象并使用其脚本/变量?
解决方案
我认为你需要稍微重构你的代码。
所以这就是我会怎么做
public class Item : MonoBehaviour {
public string itemName;
public int count;
}
我将为Item
你的游戏中的木头、铁或任何东西创建一个基类。
接下来,我将创建一个处理程序脚本,用于跟踪所有已单击/未单击的项目
处理程序.cs
公共类处理程序:MonoBehaviour {
public Item itemPrefab;
public Dictionary<string, Item> displayItems= new Dictionary<string, Item>();
public void OnWoodClicked()
{
OnItemClicked("wood");
}
public void OnIronClicked()
{
OnItemClicked("iron");
}
private void OnItemClicked(string itemKey)
{
if (displayItems.ContainsKey(itemKey))
{
displayItems[itemKey].count++;
}
else
{
Item item = Instantiate(itemPrefab);
item.count = 1;
item.itemName=itemKey;
displayItems.Add(itemKey, item);
}
}
}
所以为了跟踪创建的项目,我创建了一个公共字典Dictionary<string, Item> displayItems;
在此脚本OnItemClicked(string itemKey)
中,方法将检查是否已创建此类型的项目。(通过检查该密钥是否存在)
如果该项目未创建,那么我们将实例化新Item
的(您要显示的显示项目的预制件)并根据其键将其添加到字典中。
但是,如果它已经存在,那么只需随意访问该displayItems[itemKey]
对象
因此,例如,如果您单击 Wood,您将可以访问木材展示项目,如displayItems["wood"]
.
我希望这有帮助。如果您想让我说得更清楚,请发表评论。
推荐阅读
- javascript - 通过 HTTP 请求发送文件
- javascript - 当内容出现在底部时使页脚向上移动
- mysql - 交换mysql中的主键
- java - JVM如何计算提交的堆内存?
- c++ - 如何使用在我的头文件中某处声明的枚举?
- ios - 更改 Label 后 Swift Animation 的行为很奇怪
- python-3.x - 调用数组元素会引发错误“列表索引超出范围”
- perl - 无法解释的 Google 地图地理编码 OVER_QUERY_LIMIT
- android-studio - AndroidStudio:我的构建 gradle 的文本是灰色的
- header - 如何在提琴手的请求标头中添加客户端IP