“Transform"一个网格以编程方式进入另一个网格
本文关键字:网格 一个 编程 方式进 另一个 Transform quot | 更新日期: 2023-09-27 17:55:06
我需要通过添加或减去三角形和顶点并改变它们的位置来将我的网格转换为另一个。
我的目标是将我的"怪物"(这是一个单一的网格)转化为一个人(这也是一个单一的网格)在Unity内顺利。你可以在这个项目中找到类似于"皱褶网格修改器"的东西
很抱歉我的英语不好,我不是一个讲英语的人,提前感谢。
动态创建一个网格:
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(),直到"转换"完成后。类似地,如果你只期望对网格进行小的每帧转换,你可以将RecalculateNormals()限制为每隔一帧或每300ms。