2016-03-21 153 views
0

我寫了一個函數,可以從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; 
} 

我似乎無法找出它爲什麼超出範圍。任何人都可以看到我犯的缺陷嗎?

在此先感謝!

回答

1

發現問題!索引i每次增加3個。但是,我不能使用找到放置三角形的第一維的三角形陣列的位置。所以爲了獲得那個位置,我只是將i除以3以獲得正確的位置並修復它!

using UnityEngine; 
using System.Collections; 

public class FetchTriangleTest : MonoBehaviour { 

    // Use this for initialization 
    void Start() { 

     Vector3[,] test = CreateTriangles(transform.GetComponent<MeshFilter>().mesh); 
    } 

    static Vector3[,] CreateTriangles(Mesh _mesh) 
    { 
     // In deze functie maak in een twee demensionale array waar ik de triangles in opsla. 
     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) 
     { 
      int triIndex = i/3; 
      TTriangleArray[triIndex,0] = _mesh.vertices[_mesh.triangles[i + 0]]; 
      TTriangleArray[triIndex,1] = _mesh.vertices[_mesh.triangles[i + 1]]; 
      TTriangleArray[triIndex,2] = _mesh.vertices[_mesh.triangles[i + 2]]; 
     } 
     return TTriangleArray; 
    } 
} 
0

我會看到的第一件事是你的TTriangleAmount變量。看起來您有一個Vector3類型的二維數組,並且您將第一維的長度設置爲TTriangleAmount。 TTriangleAmount看起來像是將三角形的數量設置爲三分之一,所以如果您的三角形少於三個,您會得到0,如果網格中有三個三角形,則會得到1,依此類推。

您正在循環三角點,此時點的數量約爲TTriangleAmount的三倍,所以您可以擺脫TTriangleAmount的'/ 3'或者乾脆離開完全使用它並使用TTrianglePoint設置Vector3數組中第一個維度的大小。