ugui生成雷达图
网上找了下没啥好的代码,自己结合资料优化了下,支持创建任意边数的雷达图
原理是采用CanvasRender创建Mesh
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(CanvasRenderer))]
public class UGUI_Radar : MonoBehaviour
{
[SerializeField] private Material mat;//材质球,自行创建,shader选择 UI/Default
[SerializeField] private Texture _tex;//贴图,可选
private CanvasRenderer _render;
public List<int> dataList = new List<int>(10);//每个点的数据
[SerializeField] private float radarSize = 10f;//雷达图的长度
// Start is called before the first frame update
void Start()
{
_render = GetComponent<CanvasRenderer>();
UpdateRadarVisualData();
}
// Update is called once per frame
void Update()
{
}
/// <summary>
/// 生成雷达图
/// </summary>
public void UpdateRadarVisualData()
{
int _length = dataList.Count;
if (_length < 3)
{
Debug.LogError("边数不能小于3");
return;
}
Mesh mesh = new Mesh();
Vector3[] vertices = new Vector3[_length + 1];
Vector2[] uv = new Vector2[_length + 1];
int[] triangles = new int[3 * _length];//一个三角形,三个点,5个图形,乘以5
float angleIncrement = 360f / _length;//度数
vertices[0] = Vector3.zero;
for (int i = 1; i <= _length; i++)
{
vertices[i] = Quaternion.Euler(0, 0, -angleIncrement * (i - 1)) * Vector3.up * radarSize * dataList[i-1];
}
uv[0] = Vector2.zero;
for (int i = 1; i <= _length; i++)
{
uv[i] = Vector2.one;
}
/*
triangles[0] = 0;
triangles[1] = 1;
triangles[2] = 2;
triangles[3] = 0;
triangles[4] = 2;
triangles[5] = 3;
triangles[6] = 0;
triangles[7] = 3;
triangles[8] = 4;
triangles[9] = 0;
triangles[10] = 4;
triangles[11] = 5;
triangles[12] = 0;
triangles[13] = 5;
triangles[14] = 1;
*/
//注释规律总结
for (int i = 0; i < _length * 3; i++)
{
if (i%3 == 0)
{
triangles[i] = 0;
}
else
{
if ((i-1)%3 == 0)
{
triangles[i] = (i - 1) / 3 + 1;
}
else
{
triangles[i] = (i - 2) / 3 + 2;
}
}
//最终值为1
if (i == _length * 3 - 1)
{
triangles[i] = 1;
}
}
mesh.vertices = vertices;
mesh.uv = uv;
mesh.triangles = triangles;
_render.SetMesh(mesh);
_render.SetMaterial(mat, _tex);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~