using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
using System;
/// <summary>
/// 绘制五边形雷达图,可转换多边形雷达图
/// 以下是五边形的顶点示意图,012为一个三角形,023为一个三角形,034为一个三角形,
/// 045为一个三角形,051为一个三角形,五个三角形拼接变成五边形
///
/// 3
///
/// 1 0 5
///
/// 2 4
/// </summary>
public class UGUIDrawRadar : Graphic
{
//顶点的坐标,顶点数量必须大于2
public List<Vector2> vertexList = new List<Vector2>();
//雷达图的五个分数
public float[] score = new float[5];
//雷达图的半径
public float radius = 5f;
//雷达图最大分数
float maxScore =100;
//雷达图最小分数
float minScore = 0;
/// <summary>
///
/// </summary>
/// <param name="vh"></param>
protected override void OnPopulateMesh(VertexHelper vh)
{
base.OnPopulateMesh(vh);
List<UIVertex> targetVertexList = new List<UIVertex>();
int triangleCount = vertexList.Count - 2;
//三角形 构成
for (int i = 0; i < triangleCount; i++)
{
for (int j = 0; j < 3; j++) //三角形的三个点
{
UIVertex vertex = new UIVertex();
if (j == 0)
{
vertex.position = vertexList[0];
}
else
{
vertex.position = vertexList[i + j];
}
vertex.color = color;
targetVertexList.Add(vertex);
}
}
//最后一个三角形 051
for (int k = 0; k < 3; k++)
{
UIVertex vertex = new UIVertex();
if (k == 0)
{
vertex.position = vertexList[0];
}
else if (k == 1)
{
vertex.position = vertexList[1];
}
else if (k == 2)
{
vertex.position = vertexList[5];
}
vertex.color = color;
targetVertexList.Add(vertex);
}
vh.Clear();
vh.AddUIVertexTriangleStream(targetVertexList);
}
/// <summary>
/// 设置雷达图绘制顶点
/// </summary>
void SetVertex()
{
vertexList.Clear();
vertexList.Add(Vector2.zero);
for (int i = 0; i < score.Length; i++)
{
var angle = i*2*Mathf.PI/5;//角度换算
vertexList.Add(new Vector2(radius * Mathf.Sin(angle) * ResetScore(score[i]), radius * Mathf.Cos(angle) * ResetScore(score[i])) );
}
}
/// <summary>
/// 分数限制
/// </summary>
/// <param name="sco"></param>
/// <returns></returns>
float ResetScore(float sco)
{
float score;
score = sco;
if (sco > maxScore) {
score = maxScore;
}
if (sco < minScore)
{
score = minScore;
}
return score;
}
/// <summary>
/// 设置雷达图的五个分数
/// </summary>
/// <param name="scores_00"></param>
/// <param name="scores_01"></param>
/// <param name="scores_02"></param>
/// <param name="scores_03"></param>
/// <param name="scores_04"></param>
public void SetScores(float scores_00, float scores_01, float scores_02,float scores_03, float scores_04)
{
score[0] = scores_00;
score[1] = scores_01;
score[2] = scores_02;
score[3] = scores_03;
score[4] = scores_04;
SetVertex();
// Debug.Log("SetScores");
}
/// <summary>
/// 雷达图截屏
/// </summary>
public void CaptureScreen()
{
Application.CaptureScreenshot(string.Format("{0}\\最终分数_{1}x{2}_{3}.png", Application.streamingAssetsPath, Screen.width, Screen.height, ReturnDate()));
Debug.Log("截图放在" + Application.streamingAssetsPath + "路径下");
}
/// <summary>
/// 截图时间
/// </summary>
/// <returns></returns>
string ReturnDate()
{
string data;
string dataYear;
string dataMonth;
string dataDay;
string dataHour;
string dataMin;
string dataSecond;
dataYear = System.DateTime.Now.Year.ToString();
dataDay = System.DateTime.Now.Day.ToString();
dataMonth = System.DateTime.Now.Month.ToString();
dataHour = System.DateTime.Now.Hour.ToString();
dataMin = System.DateTime.Now.Minute.ToString();
dataSecond = System.DateTime.Now.Second.ToString();
data = dataYear + "_" + dataMonth + "_" + dataDay + "_" + dataHour + "" + dataMin + "" + dataSecond;
return data;
}
}
UGUI雷达图
最新推荐文章于 2023-09-13 17:32:49 发布