You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中List<List<GameObject>>触发ArgumentOutOfRangeException异常求助

解决ArgumentOutOfRangeException异常:拆分Inspector列表时索引越界问题

我想在Inspector里只维护一个采集方块列表,通过代码把它拆分成4个子类别列表,但运行后一直触发ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection.异常,异常参数为index,调用栈指向BlockPlacing.cs的Start方法第16行。

现有代码

[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]);
        }
    }
}

我还试过用_mineralsList[j][i] = blocks[i]赋值,同样触发相同异常。

Inspector设置说明

Inspector中已为blocks列表添加了16个GameObject(4类,每类4个)。


问题原因

你初始化_mineralsList时只设置了容量为4,但并没有实际创建4个空的子列表。此时_mineralsList的Count还是0,直接通过_mineralsList[j]访问索引j(0-3)必然会触发索引越界异常。

另外,就算子列表创建了,当前代码逻辑也有问题:每次循环j都会重复往同一个子列表插入blocks[0]-blocks[3],而不是按类别拆分(比如blocks[0-3]给第1个子列表,blocks[4-7]给第2个,以此类推)。

修复方案

  1. 先初始化_mineralsList的4个子列表
  2. 按正确的索引范围拆分blocks列表到对应子列表

修正后的代码:

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

void Start()
{
    // 先创建4个空的子列表
    for (int j = 0; j < 4; j++)
    {
        _mineralsList.Add(new List<GameObject>());
    }

    // 按每4个一组拆分到对应子列表
    for (int j = 0; j < 4; j++)
    {
        for (int i = 0; i < 4; i++)
        {
            // 计算当前元素在blocks中的索引:j*4 + i
            int blockIndex = j * 4 + i;
            // 先判断索引是否有效,避免blocks元素不足时出错
            if (blockIndex < blocks.Count)
            {
                _mineralsList[j].Add(blocks[blockIndex]);
            }
        }
    }
}

额外优化建议

  • 可以在Awake或OnValidate中做拆分,这样在编辑模式下也能看到结果(如果需要)
  • 添加校验逻辑,比如在OnValidate中检查blocks的数量是否是4的倍数,避免运行时出错:
void OnValidate()
{
    if (blocks.Count % 4 != 0)
    {
        Debug.LogError("blocks列表的元素数量必须是4的倍数!");
    }
}

内容的提问来源于stack exchange,提问作者Bloemenpot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 18:01:19