2013-01-21 50 views
3

我需要某種方法通過添加或減去三角形和頂點並更改其位置來將網格轉換爲另一個網格。將一個網格「編程」爲另一個編程

我的目標是在Unity內順利地將我的「怪物」(即單個網格)轉換爲人類(也就是單個網格)。 東西看起來像你可以在這個項目中找到的「Crumple Mesh Modifier」here

對不起我的英語,我不是一個英文speeker,並提前感謝。

回答

2

動態創建一個網格:

MeshFilter meshFilter = GetComponent(); 
Mesh mesh = meshFilter.sharedMesh; 

if (mesh == null){ 
    meshFilter.mesh = new Mesh(); 
    mesh = meshFilter.sharedMesh; 
} 

Vector3 p0 = new Vector3(0,0,0); 
Vector3 p1 = new Vector3(1,0,0); 
Vector3 p2 = new Vector3(0,1,0); 
Vector3 p3 = new Vector3(0,0,1); 

// clear mesh of current data 
mesh.Clear(); 

// set vertices 
mesh.vertices = new Vector3[]{p0,p1,p2,p3}; 

// set 
mesh.triangles = new int[]{ 
    0,1,2, 
    0,2,3, 
    2,1,3, 
    0,3,1 
}; 
mesh.RecalculateNormals(); 
mesh.RecalculateBounds(); 
mesh.Optimize(); 

修改現有的頂點(將工作同樣爲面):

// mesh.vertices returns a copy 
Vector3[] vert_copy = mesh.vertices; 
vert_copy[0] = new Vector3(10,11,12); 
vert_copy[1] = new Vector3(13,14,15); 

// reassign new vertices to mesh 
mesh.vertices = vert_copy; 

mesh.RecalculateNormals(); 
mesh.RecalculateBounds(); 
mesh.Optimize(); 

這些電話讓昂貴的,當你重新計算法線和界限。如果您的網格物體在「變形」時不會與其他網格進行物理交互,則可以在「變形」完成之前將其延遲RecalculateBounds()。同樣,如果您預計網格只有很小的每幀轉換,則可以將重新計算正常()限制爲每隔一幀或每隔300ms。

+0

+1好的回答:) – Kay