Unity3D:数组超出范围

时间:2016-03-21 21:48:01

标签: unity3d

我写了一个函数,从Unity3d中的网格中获取三角形,但是我得到一个"数组超出范围"错误。这是功能:

static Vector3[,] CreateTriangles(Mesh _mesh)
{
    // In this function I make an 2d array and then I store the triangles in there.
    int TTriangleAmount = _mesh.triangles.Length / 3;
    int TTrianglePoints = _mesh.triangles.Length;
    int TTriangleSize = 3;
    Vector3[,] TTriangleArray = new Vector3[TTriangleAmount,TTriangleSize];

    for(int i = 0; i < TTrianglePoints ; i += TTriangleSize)
    {
        TTriangleArray[i,0] = _mesh.vertices[_mesh.triangles[i + 0]];
        TTriangleArray[i,1] = _mesh.vertices[_mesh.triangles[i + 1]];
        TTriangleArray[i,2] = _mesh.vertices[_mesh.triangles[i + 2]];
    }
    return TTriangleArray;
}

我似乎无法弄清楚它为何超出范围。任何人都可以看到我制作的缺陷吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

发现问题了!索引 i 每次都会上升3。但是我不能使用 i 来找到将三角形放在三角形数组的第一维中的位置。所以为了获得这个位置,我只是将 i 划分为3来获得正确的位置并修复它!

> series
   time code
1     1    B
2     2    B
3     3    B
4     4    B
5     5    B
6     6    B
7     7    A
8     8    A
9     9    A
10   10    B
11   11    B
12   12    A
13   13    A
...
29   29    B
30   30    A
31   31    A
32   32    A
33   33    A
34   34    A
35   35    A

答案 1 :(得分:0)

我要看的第一件事是你的TTriangleAmount变量。看起来你有一个Vector3类型的二维数组,并且你将第一个维度的长度设置为TTriangleAmount。 TTriangleAmount看起来像它设置为三角形的三角形数量,所以如果你有少于三个三角形你得到0,如果你的网格中有三个三角形你得到1,依此类推。 / p>

你循环通过三角形点,此时,点数大约是TTriangleAmount值的三倍,所以你可以摆脱TTriangleAmount&#39; s&#39 ; / 3&#39;或者完全取消它并使用TTrianglePoint设置Vector3数组中第一个维度的大小。