Unity如何用网格绘制一个正五边形
网格绘制其实非常简单,只要我们把握好顶点的位置,顶点索引的顺序就可以绘制出自己想要的网格。
绘制一个正五边形,我们必须先把五个顶点的坐标都算出来,我们就按以下这种情况来说明以下:
熟悉三角函数的朋友一定可以非常容易的求出每个点的坐标了,在这里具体过程就不列举了,最后求出五个点的坐标分别是(0,0)(cos36,sin36)(2cos36,0)(cos72+1,-sin72)(cos72,-sin72)
我们这里的坐标是按顺时针来纪录的,从原点开始。
在这里我们需要注意一点,三角形顶点索引的顺序决定了三角形是正面还是反面,在Unity坐标空间中,顺时针的索引代表正面,反之则是反面,我们设刚才的五个点分别是A,B,C,D,E,那么我们构成五边形的三个三角形就是A-B-C,A-C-D,A-D-E
接下来就是我们调用Mesh的公开的属性来绘制网格了,代码如下:
using
UnityEngine;
public
class
ExampleClass
:
MonoBehaviour
{
private
Vector3[] newVertices;
private
int[] newTriangles;
void
Start()
{
newVertices =
new
Vector3[5] {
Vector3.zero,
new
Vector3(Mathf.Cos(Mathf.Deg2Rad
* 36), 0, Mathf.Sin(Mathf.Deg2Rad
* 36)), new
Vector3(2 *
Mathf.Cos(Mathf.Deg2Rad
* 36), 0, 0), new
Vector3(Mathf.Cos(Mathf.Deg2Rad
* 72)+1, 0, -Mathf.Sin(Mathf.Deg2Rad
* 72)), new
Vector3(Mathf.Cos(Mathf.Deg2Rad
* 72), 0, -Mathf.Sin(Mathf.Deg2Rad
* 72)) };
newTriangles =
new
int[9] { 0, 1, 2,0,2,3 ,0,3,4};
Mesh
mesh =
new
Mesh();
mesh.vertices = newVertices;
mesh.triangles = newTriangles;
GetComponent<MeshFilter>().mesh
= mesh;
}
}
我们只需要将脚本挂载有MeshFilter组件的物体上就可以使用了。其实绘制网格最关键的就是搞清楚构成三角形时顶点的顺序,如果还有不同的绘制方法或者更好的算法欢迎讨论<毕竟绘制一个五边形还得求五个点坐标,感觉这个方法好麻烦:(>