...using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
public class RadarMap :MaskableGraphic
{
public Texture2D sprite;
public float[] arr;
public float r;
public override Texture mainTexture
{
get
{
if (sprite!=null)
{
return sprite;
}
if (material != null && material.mainTexture!= null)
{
return material.mainTexture;
}
return s_WhiteTexture;
}
}
//执行比awake快,编辑模式下能立马改变场景中的物体
·protected override void OnPopulateMesh(VertexHelper vh)
{
Rect rect = this.rectTransform.rect;
int n = arr.Length;
r = rect.width < rect.height ? rect.width / 2 : rect.height / 2;
if (n >= 3)
{
vh.Clear();
//圆心
vh.AddVert(Vector3.zero, color, new Vector2(0.5f, 0.5f));
//计算每个角的弧度
float ang = 2 * Mathf.PI / n;
//计算数组的最大值与半径的比值,可以不用
float p = r/arr.Max();
for (int i = 0; i < n; i++)
{
float x = Mathf.Sin(i * ang) * (arr[i] > r ? r : arr[i]);
float y = Mathf.Cos(i * ang) * (arr[i] > r ? r : arr[i]);
float uvx = (x + r) / (2 * r);
float uvy = (y + r) / (2 * r);
//添加顶点
vh.AddVert(new Vector3(x, y, 0), color, new Vector2(uvx,uvy));
if (i == 0)
{
//添加绘制
vh.AddTriangle(0, n, 1);
}
else
{
vh.AddTriangle(0, i, i + 1);
}
}
}
}
}...