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;
}
}
Unity工作隨記_UGUI雷達圖
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.