我写了一个函数,从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;
}
我似乎无法弄清楚它为何超出范围。任何人都可以看到我制作的缺陷吗?
提前致谢!
答案 0 :(得分:1)
> 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数组中第一个维度的大小。