碰到一个需求是给你N个点 这N个点围成一个图形 需要自己在Unity中绘制出来这个图形 从而生成地图
首先主要了解Unity中的图形是如何绘制出来的
众所周知U3D中任何图形都是有N个三角面构成 而我们的顶点已经给到我们了
所以我们生成多边形也就是生成N个三角面连接而成的
首先我们有N个点这N个点按顺序连接而成为一个多边形
在这里同时要注意 三角形的连接顺序决定面的正反 如果 123 连接则是面向 相机的 而如果是 132 则是 背对相机 所以绘制的时候要注意点的连接顺序 否则的话就会出现看不见或者绘制出来的效果不对
而Mesh中有两个API主要用来绘制三角面
mesh.vertices即图形的各个顶点
他是一个Vector3数组用来表示各个顶点的位置
mf.mesh.triangles即三角面的连接方式
他是一个List
我觉得主要的难点在于N个点如何保证绘制的三角面最少且完整的绘制出了图形这个目前我暂时并没有想到更好的算法如果有人写出了更好的算法希望能@我一下
具体代码如下
// An highlighted block
MeshFilter mf = obj.AddComponent();
MeshRenderer mr = obj.AddComponent();
Mesh mesh = new Mesh();
mf.mesh = mesh;
obj.transform.localPosition = new Vector3(0, 0, -1);
//data即顶点数组
Vector3[] point = data;
List iss = new List();
for (int j = 0; j < point.Length - 1; j++) { iss.Add(j); iss.Add(j+1); iss.Add(point.Length - 1-j); } mr.material.color = Color.black; mf.mesh.vertices = point; mf.mesh.triangles = iss.ToArray();