动态创建网格:
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);
mesh.Clear();
mesh.vertices = new Vector3[]{p0,p1,p2,p3};
mesh.triangles = new int[]{
0,1,2,
0,2,3,
2,1,3,
0,3,1
};
mesh.RecalculateNormals();
mesh.RecalculateBounds();
mesh.Optimize();
修改现有的顶点(对于面也是类似的):
Vector3[] vert_copy = mesh.vertices;
vert_copy[0] = new Vector3(10,11,12);
vert_copy[1] = new Vector3(13,14,15);
mesh.vertices = vert_copy;
mesh.RecalculateNormals();
mesh.RecalculateBounds();
mesh.Optimize();
当您重新计算法线和边界时,这些调用会变得很昂贵。如果您的网格在“变换”过程中不会与其他网格发生物理交互,可以将 RecalculateBounds() 推迟到“变换”完成后再进行。同样,如果您预期每帧对网格进行小的变换,则可以将 RecalculateNormals() 限制为每隔一帧或每300ms执行一次。