饼状图或者是雷达图是根据属性自动生成的自定义图形。这里展示了如何使用uGUI完成这一功能。
先附上我制作雷达图的控件的代码 UIPropWidget.cs
using UnityEngine;
using System.Collections.Generic;
using UnityEngine.UI;
/*
*
* 2 6
*
* 3 7
*
* 0 1 5 4
*
*
* 2 6位为属性0 3为属性1 0为属性2 4为属性3 7为属性4
*/
public class UIPropWidget : Graphic
{
private enum AnimationStatus
{
NOT_START,
ANIMATING,
FINISH,
}
public List<Vector2> _maxPropVector;
public List<int> _testProp;
public bool _withAnimation = true;
private const int VERTEX_SIZE = 8; // 必须为4的倍数 通过绘制两个四边形组成一个五边形
private const float ANIMATION_TIME = 0.8f;
private const float MAX_PROP_VALUE = 100.0f;
private List<Vector2> _propList = new List<Vector2>();
private List<Vector2> _currentList = new List<Vector2>();
private List<UIVertex> _vertexList = new List<UIVertex>();
private bool _isStartAnimation = false;
private bool _isAnimationFinish = false;
private bool _isSetValue = false;
private float _startTime = 0;
private float _currentTime = 0;
protected void Awake()
{
_isStartAnimation = false;
_isAnimationFinish = false;
_isSetValue = false;
for (int i = 0; i < VERTEX_SIZE; ++i) {
_propList.Add(Vector2.zero);
_currentList.Add(Vector2.zero);
}
}
// 设置五个属性值
public void SetPropList(List<int> list, bool withAnimation = false)
{
if (list.Count < 5) {
Log.Error("必须提供5个属性");
return;
}
// 给每个属性顶点赋值
_propList[0] = (_maxPropVector[0] - Vector2.zero) * list[2] / MAX_PROP_VALUE;