1.创建一个Image,把Image组件移出
2.创建脚本并且挂image上
3.给image一个背景板
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MyRaderMap : MaskableGraphic
{
//精灵
public Sprite activeSprite;
//纹理
public override Texture mainTexture
{
get
{
if (activeSprite == null)
{
if (material != null && material.mainTexture != null)
{
//有材质球使用材质球的
return material.mainTexture;
}
//都没有使用白色的
return Graphic.s_WhiteTexture;
}
//有精灵使用精灵的
return activeSprite.texture;
}
}
//声明一个数组
public float[] arr;
protected override void OnPopulateMesh(VertexHelper vh)
{
//小于三条边绘制默认图形
if(arr.Length<3)
{
base.OnPopulateMesh(vh);
return;
}
//获取宽高
float w=rectTransform.sizeDelta.x;
float v=rectTransform.sizeDelta.y;
vh.Clear();
//每个角的弧度
float ang = 2 * Mathf.PI / arr.Length;
//先画圆心
vh.AddVert(Vector3.zero, Color.cyan, new Vector2(0.5f,0.5f));
for(int i = 0; i < arr.Length; i++)
{
//计算顶点坐标
float x=Mathf.Sin(ang * i) * arr[i];
float y=Mathf.Cos(ang * i) * arr[i];
//计算uv坐标
float uvx = (x + w / 2) / w;
float uvy = (y + v / 2) / v;
//添加顶点
vh.AddVert(new Vector3(x,y,0),Color.cyan,new Vector2(uvx, uvy));
//添加绘制顺序
if(i == 0)
{
vh.AddTriangle(0, arr.Length, 1);
}
else
{
vh.AddTriangle(0, i, i + 1);
}
}
}
//点击按钮进行数值更换
public void OnClick()
{
SetAllDirty();
for(int i = 0;i < arr.Length;i++)
{
arr[i] = Random.Range(0, 50);
}
}
}
效果如图: