UGUI雷达图

来源:互联网 发布:财务审计软件oa 编辑:程序博客网 时间:2024/04/29 22:42
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;    }}

原创粉丝点击