我正在研究一种生态捕食者 - 猎物平衡模拟器。使用Vuforia我和我的项目组想要模拟森林火灾,猎人等对人口规模的影响(小规模)。为此,我需要能够手动添加和删除鹿和狼。不要问为什么我们选择了鹿和狼。
我使用OnGui()
添加了4个按钮,一个加号和减号用于添加和删除鹿,同样适用于狼。 Here's what the buttons look like on the top of my screen.按钮确实设置添加动物,并删除 首先手动添加的动物。没有动物和1之间的乒乓可以永远进行,但是连续添加的第二只或任何动物都不能通过按下减号来移除。我很困惑为什么。
下面我已完整发布了OnGui()
方法。我怀疑它与List<>的方式有关。的工作原理。
void OnGUI()
{
// Add deer.
if (GUI.Button(new Rect(marginLeft, marginTop, size, size), plus, GUIStyle.none))
{
GameObject newDeer = Instantiate(deerPrefab, deerSpawn.position, Quaternion.identity);
deerList.Add(newDeer);
}
// Remove deer.
if (GUI.Button(new Rect(marginLeft, marginTop + marginBetween + size, size, size), minus, GUIStyle.none))
{
Debug.Log("Amount of deer in the list: " + deerList.Count);
GameObject removeDeer = deerList[deerList.Count - 1];
Destroy(removeDeer);
Debug.Log("Removing deer. " + deerList.Count + " deer left.");
}
// Add wolf.
if (GUI.Button(new Rect(Screen.width - marginLeft - size, marginTop, size, size), plus, GUIStyle.none))
{
GameObject newWolf = Instantiate(wolfPrefab, wolfSpawn.position, Quaternion.identity);
wolvesList.Add(newWolf);
}
// Remove wolf.
if (GUI.Button(new Rect(Screen.width - marginLeft - size, marginTop + marginBetween + size, size, size), minus, GUIStyle.none))
{
Debug.Log("Amount of wolves in the list: " + wolvesList.Count);
GameObject removeWolf= wolvesList[wolvesList.Count - 1];
Destroy(wolvesList.Last());
Debug.Log("Removing wolf. " + wolvesList.Count + " wolves left.");
}
}
如果您想要任何其他信息来帮助解决问题,我们非常乐意为您提供帮助。提前谢谢!
答案 0 :(得分:2)
在此处的行中,您将列表中的最后一个鹿分配给新的游戏对象(与列表分开),然后使用Destroy()将其从场景中删除。< / p>
GameObject removeDeer = deerList[deerList.Count - 1];
如果你想从列表本身删除鹿,你应该这样做:
deerList.RemoveAt(deerList.Count - 1);
或List.Remove();
的其他变体