【问题标题】:Iterating and instantiating game objects via a list [closed]通过列表迭代和实例化游戏对象[关闭]
【发布时间】:2014-01-07 14:43:03
【问题描述】:

我有一个完整的游戏对象列表,我正在尝试迭代并一次生成一个。当一个新的游戏对象产生时,我希望旧的游戏对象消失。但是,目前我的代码正在生成我的整个游戏对象列表,而不仅仅是一个元素。

有人可以看看我的代码,看看我做错了什么吗?

if(GUI.Button(new Rect(10,130,100,50), "Forward"))
    {
        for( int i = 0; i < object_List.Count; i++)
        {
            Instantiate((GameObject)object_List[i]);
        }
    }

【问题讨论】:

  • 您正在循环整个数组,因此您将实例化n 对象(其中n 是数组的大小)。
  • 我想说,如果您无法弄清楚这一点,您需要阅读一些 C# 基础知识。您正在使用 for 循环遍历整个 object_list,然后创建所有对象,其中没有任何内容甚至暗示一次创建一个对象。

标签: c# list unity3d


【解决方案1】:

如果我理解正确,您每次按下按钮时都会尝试实例化一个对象,同时删除当前生成的对象。 创建一个私有作用域变量来存储您当前的索引:

private int index = 0;

然后你可以继续在对象上一次实例化:

if(GUI.Button(new Rect(10,130,100,50), "Forward"))
{
    if (index > 0 && object_List[index] != null)
    {
        Destroy((GameObject)object_List[index]);
    }
    Instantiate((GameObject)object_List[index]);
    index ++;
}

你只需要检查一下 index 是否真的比你的列表大,这样你就不会得到 IndexOutOfBounds 异常。

【讨论】:

  • 没问题,如果您对它们感到满意,请记得标记upvote / 将答案标记为正确:)
猜你喜欢
  • 2018-10-28
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
相关资源
最近更新 更多