Unity如何用网格绘制一个正五边形

网格绘制其实非常简单,只要我们把握好顶点的位置,顶点索引的顺序就可以绘制出自己想要的网格。
绘制一个正五边形,我们必须先把五个顶点的坐标都算出来,我们就按以下这种情况来说明以下:
Unity如何用网格绘制一个正五边形_第1张图片
熟悉三角函数的朋友一定可以非常容易的求出每个点的坐标了,在这里具体过程就不列举了,最后求出五个点的坐标分别是(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组件的物体上就可以使用了。其实绘制网格最关键的就是搞清楚构成三角形时顶点的顺序,如果还有不同的绘制方法或者更好的算法欢迎讨论<毕竟绘制一个五边形还得求五个点坐标,感觉这个方法好麻烦:(>

你可能感兴趣的:(unity)