在UI面板上用画圆的思想去画一个多边形。
脚本首先要继承 MaskableGraphic ,然后OPopulateMesh方法会在脚本编译结束之后进行执行,所以这里只做绘制。
圆上的点的坐标可以通过三角函数计算出来,获得顶点之后可以通过数组来改变半径长度从而使对应属性的顶点发生变化。
下面是代码: //记得设置半径R和数组arr里的值,太小可是看不见的
using UnityEngine;
using UnityEngine.UI;
public class MeshUITest1 : MaskableGraphic
{
public float[] arr;
public int r = 50;
public Sprite sprite;
public override Texture mainTexture
{
get
{
if(sprite!=null)
{
return sprite.texture;
}
if(material!=null&&material.mainTexture!=null)
{
return material.mainTexture;
}
return s_WhiteTexture;
}
}
protected override void OnPopulateMesh(VertexHelper vh)
{
int n = arr.Length;
float ang = 2 * Mathf.PI / n;
if (n >= 3)
{
vh.Clear();
vh.AddVert(new Vector3(0, 0, 0), color, new Vector2(0.5f, 0.5f));
for (int i = 0; i < n; i++)
{
float x = Mathf.Sin(ang*i) * arr[i];
float y = Mathf.Cos(ang*i) * arr[i];
vh.AddVert(new Vector3(x, y, 0), color, new Vector2((x + r) / (2 * r), (y + r) / (2 * r)));
if(i==0)
{
vh.AddTriangle(0, n, 1);
}
if (i > 0)
{
vh.AddTriangle(0, i, i + 1);
}
}
}
}