无法从列表<>

时间:2018-01-25 20:21:28

标签: c# unity3d

我正在研究一种生态捕食者 - 猎物平衡模拟器。使用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.");
        }

    }

如果您想要任何其他信息来帮助解决问题,我们非常乐意为您提供帮助。提前谢谢!

1 个答案:

答案 0 :(得分:2)

在此处的行中,您将列表中的最后一个鹿分配给新的游戏对象(与列表分开),然后使用Destroy()将其从场景中删除。< / p>

GameObject removeDeer = deerList[deerList.Count - 1];

如果你想从列表本身删除鹿,你应该这样做:

deerList.RemoveAt(deerList.Count - 1);

或List.Remove();

的其他变体