Unity工作随记_UGUI雷达图

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;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章