有时候需要程序化动态生成网格(例如骨骼)
先3D建一个模型,然后导入到Unity 调试查看mesh.vertices 的排列,用excel几下索引。然后赋值triangle的时候记得按照 123456 的顺序排列,因为Unity就是这样导入的貌似,否则画的网格不正确,最后记得重新计算下法线
//Vector3[] vertex = new Vector3[6];
//var mid = parent.position + parent.forward * boneSize;
//vertex[0] = parent.position;
//vertex[1] = mid + (parent.right + parent.up) * boneSize;
//vertex[2] = mid + (parent.right + -parent.up) * boneSize;
//vertex[3] = mid + (-parent.right + parent.up) * boneSize;
//vertex[4] = mid + (-parent.right + -parent.up) * boneSize;
//vertex[5] = child.position;
Vector3[] vertex = {
new Vector3(0.0f, -3.2f, 0.0f),
new Vector3(1.0f, -1.1f, -1.0f),
new Vector3(1.0f, -1.1f, 1.0f),
new Vector3(-1.0f, -1.1f, -1.0f),
new Vector3(-1.0f, -1.1f, 1.0f),
new Vector3(0.0f, 1.0f, 0.0f)
};
int[] triangle = {
0, 1, 2, 0, 3, 1, 0, 4, 3, 0, 2, 4, 2, 1, 5, 1, 3, 5, 3, 4, 5, 4, 2, 5 };
var vertices = new Vector3[triangle.Length];
for (int i = 0; i < triangle.Length; i++)
{
vertices[i] = vertex[triangle[i]];
}
for (int i = 0; i < triangle.Length; i++)
{
triangle[i] = i;
}
m_Mesh.vertices = vertices;
m_Mesh.triangles = triangle;
m_Mesh.RecalculateNormals();
// 这里不需要设置矩阵 因为顶点已经是动态生成的了
Graphics.DrawMesh(m_Mesh, Vector3.zero, Quaternion.identity, Material, 0);