Unity:如果执行这段代码,Unity告诉我,在第43行,指定的索引超出了数组的范围。

问题描述 投票:0回答:1
if (sledgeImpact.didDestruction)
        {
            sledgeImpact.didDestruction = false;
            Collider[] firstColliders = Physics.OverlapBox(walls[0].BoxCenter, walls[0].BoxSize, Quaternion.identity, mask);
            Debug.Log(firstColliders.Length);
            if (firstColliders.Length < 350)
            {
                int o = 0;
                MeshFilter[] meshFilters = new MeshFilter[] {};
                foreach (Collider collider in firstColliders)
                {
                    //Line 43
                    meshFilters[o] = collider.GetComponent<MeshFilter>();
                    o++;
                }

            }
        }

我真的很难理解数组,我真的认为这段代码应该能用。不管怎么说,任何帮助都将是非常感激的。

c# arrays unity3d
1个回答
1
投票

你初始化一个零维数组。

替换 MeshFilter[] meshFilters = new MeshFilter[] {};

MeshFilter[] meshFilters = new MeshFilter[firstColliders.Length];

或者在这种情况下,使用List更好。

List<MeshFilter> meshFilters = new List<MeshFilter>();

foreach (Collider collider in firstColliders)
{
   meshFilters.Add(collider.GetComponent<MeshFilter>());
}

数组中的项数必须在初始化时定义. 用列表,你可以根据你的需要增加或减少.


2
投票

在这一行中,你创建了一个空数组。

MeshFilter[] meshFilters = new MeshFilter[] {};

你创建了一个空数组 数组是不可调整大小的,所以任何索引都会超出范围.创建列表代替。

List<MeshFilter> meshFilters = new List<MeshFilter>();

然后,在循环内,

meshFilters.Add(collider.GetComponent<MeshFilter>());
© www.soinside.com 2019 - 2024. All rights reserved.