这是一些代码。这不是全部,但我认为它是重要的代码:
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做错了什么,我不得不重置一些东西。谢谢大家展示其他一些错误。
答案 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
数组。