首先创建一个空对象添加组件Canvas Renderer
创建脚本继承MaskableGraphic类
定义Sprite类变量给雷达图赋值图片,重写获取图片的属性,代码如下
public override Texture mainTexture
{
get
{
if(sprite==null)
{
if (material != null && material.mainTexture != null)
{
return material.mainTexture;
}
return s_WhiteTexture;
}
return sprite.texture;
}
}
定义雷达图数据浮点型数组,重写OnPopulateMesh方法
判断如果不足大于等于三个数据(三个点绘制成一个面),则绘制默认图形,代码如下
if(arr.Length<3)
{
base.OnPopulateMesh(vh);
return;
}
首先清除顶点位置信息、计算雷达图的宽高、计算每个点之间的弧度
float ang = 2 * Mathf.PI / arr.Length;
float w = rectTransform.sizeDelta.x;
float h = rectTransform.sizeDelta.y;
计算每个点位的坐标位置信息并添加到顶点助手之后添加绘制顺序,代码如下
for (int i = 0; i < arr.Length; i++)
{
float x = Mathf.Sin(i * ang) * p * arr[i];
float y = Mathf.Cos(i * ang) * p*arr[i];
float uvx = (x + w / 2) / w;
float uvy = (y + h / 2) / h;
vh.AddVert(new Vector3(x, y, 0), color, new Vector2(uvx, uvy));
if(i==0)
{
vh.AddTriangle(0, arr.Length, 1);
}
else
{
vh.AddTriangle(0, i, i + 1);
}
}
添加按钮随机生成雷达图定义集合并存入随机数(集合长度大于3)
将集合转换成数组,最后清除顶点脏数据重新生成雷达图
List<float> list = new List<float>();
for (int i = 0; i < Random.Range(3,9); i++)
{
float r = Random.Range(0.1f, 100);
list.Add(r);
}
image.arr = list.ToArray();
image.SetVerticesDirty();