数组索引超出范围但索引为零,数组长度为300

时间:2013-06-16 18:57:53

标签: c# arrays multidimensional-array unity3d

这是一些代码。这不是全部,但我认为它是重要的代码:

public int Laenge = 10;
public int Breite = 10;
public Vector3[] new_Ver = new Vector3[300];
public Vector3[,] new_Ver_s = new Vector3[11,11];
public Vector2[] new_UV = new Vector2[300];
public Vector2[,] new_UV_s = new Vector2[11,11];
public int[] new_Tri =  new int[300];

void Start () { 
int n=0;

    for(int l=0;l<=Laenge;l++)
    {
        int k = 0;
        for(int b=0;b<=Breite;b++)
        {
            Debug.Log(l);Debug.Log(b);Debug.Log(n+"n");

            if(l<Laenge || b<Breite)
            {
                Debug.Log(l);Debug.Log(b);Debug.Log(n+"n");

                if(b%2 == 1)
                {
                    Debug.Log(l);Debug.Log(b);Debug.Log(n+"n");
                    new_Ver[n]=new_Ver_s[l,b];
                    new_UV[n]=new_UV_s[l,b];
                    n++;
                    new_Ver[n]=new_Ver_s[1+l,1+b];
                    new_UV[n]=new_UV_s[1+l,1+b];
                    n++;
                    new_Ver[n]=new_Ver_s[1+l,b];
                    new_UV[n]=new_UV_s[1+l,b];
                    n++;
                }
                else
                {
                    Debug.Log(l);Debug.Log(b);Debug.Log(n+"nl");
                    Vector3 pop = new_Ver_s[l,b];
                    Debug.Log(l);Debug.Log(b);Debug.Log(n);//All debug. logs are zero
                    new_Ver[n] = pop; //This is the line where it gives the error message : Array index is out of range. 
                    new_UV[n]= pop;
                    Debug.Log(l);Debug.Log(b);Debug.Log(n);
                    n++;
                    pop = new_Ver_s[l,1+b];
                    new_Ver[n]=pop;
                    new_UV[n]=pop;
                    n++;
                    pop=new_Ver_s[1+l,b];
                    new_Ver[n]=pop;
                    new_UV[n]=pop;
                    n++;
                    Debug.Log(l);Debug.Log(b);Debug.Log(n+"neo");
                }

                Debug.Log(l);Debug.Log(b);Debug.Log(n+"n");
            }

            if(b>1 || l<Laenge)
            {
                Debug.Log(l);Debug.Log(b);Debug.Log(n+"fn");
                if(b%2 ==1)
                {
                    Debug.Log(l);Debug.Log(b);Debug.Log(n+"f");
                    new_Ver[n]=new_Ver_s[l,b];
                    new_UV[n]=new_UV_s[l,b];
                    n++;
                    new_Ver[n]=new_Ver_s[l+1,b];
                    new_UV[n]=new_UV_s[l+1,b];
                    n++;
                    new_Ver[n]=new_Ver_s[l+1,b-1];
                    new_UV[n]=new_UV_s[l+1,b-1];
                    n++;
                }
                else
                {
                    Debug.Log(l);Debug.Log(b);Debug.Log(n+"f");
                    new_Ver[n]=new_Ver_s[l,b];
                    new_UV[n]=new_UV_s[l,b];
                    n++;
                    new_Ver[n]=new_Ver_s[l+1,b];
                    new_UV[n]=new_UV_s[l+1,b];
                    n++;
                    new_Ver[n]=new_Ver_s[l,b-1];
                    new_UV[n]=new_UV_s[l,b-1];
                    n++;
                }
            }
        }
    }
}

这是很多代码。注释所在的if Bracket是它首次运行的位置,但它在注释所在的行中停止。所有debug.log都为零。如果有关代码的某些部分不清楚,请在评论中询问。

问题是为什么它会给我错误信息。如果我用二维数组做类似的事情就没有问题。是因为元素是空的吗?

完整的错误消息:

  

IndexOutOfRangeException:数组索引超出范围。   meshmut.Start()(在Assets / meshmut.cs:88)

好的解决了。代码是对的。 Unity3d做错了什么,我不得不重置一些东西。谢谢大家展示其他一些错误。

2 个答案:

答案 0 :(得分:2)

老实说,我并没有完全理解您的代码示例,但在以下IF块中:

if(b>1 || l<Laenge)

b仍然可以是0,因为它是一个OR语句,所以稍后在IF块中使用语句

new_Ver[n]=new_Ver_s[l,b-1];
new_UV[n]=new_UV_s[l,b-1];

将尝试索引为-1。

答案 1 :(得分:0)

问题显然是n正在增加300以上。

你有一对嵌套循环,每个循环被定义为运行11次迭代,总共迭代121次。

在循环中,您在n块中增加if(l<Laenge || b<Breite) 3次,在if(b>1 || l<Laenge)块内再增加3次。对于外部循环的前10次迭代,l<Laenge条件将评估为true,这意味着n将增加总计至少600次,这大于你的new_Ver数组。