unity3d 参数超出范围异常:索引超出范围,在列表〈List>中[重复]< GameObject>&gt; [duplicate]

xzabzqsa  于 2023-02-16  发布在  其他
关注(0)|答案(1)|浏览(189)
    • 此问题在此处已有答案**:

How to initialize a List to a given size (as opposed to capacity)?(16个答案)
ArgumentOutOfRangeException on initialized List(1个答案)
昨天关门了。
我试图做一个不同种类的集合块的列表。2但是我想让它在检查器中只有1,然后在代码中按类别将它们分开。3我想这样做,这样检查器就不会被不同的列表弄得乱七八糟。
然而,在设置它之后,我一直收到一个错误,说ArgumentOutOfRangeException:索引超出范围。必须为非负且小于集合的大小。
参数名称:索引系统.集合.泛型.列表'1 [T]. set_Item(System.Int32索引,T值)(位于:0)块放置. Start()(位于资源/m/脚本/块放置. cs:16)<9aad1b3a47484d63ba2b3985692d80e9>:0) BlockPlacing.Start () (at Assets/m/Scripts/BlockPlacing.cs:16)
我的代码/检查员列表如下所示:
Inspector List Image
代码:

[SerializeField] private List<GameObject> blocks = new List<GameObject>(64);
    private List<List<GameObject>> _mineralsList = new List<List<GameObject>>(4);

    void Start()
    {
        for (int j = 0; j < 4; j++)
        {
            for (int i = 0; i < 4; i++)
            {
                _mineralsList[j].Insert(i, blocks[i]);
            }
        }
    }

另一种添加到_mineralList的方法是_mineralsList[j][i] = blocks[i],但也不起作用,并给出了相同的错误。

hyrbngr7

hyrbngr71#

请尝试使用此代码:

public void Start()
{
    for (int j = 0; j < 4; j++)
    {
        _mineralsList.Add(new List<GameObject>());
        for (int i = 0; i < 4; i++)
        {
            if (i < blocks.Count) {
                _mineralsList[j].Add(blocks[i]);
            }
        }
    }
}

相关问题