Unity图表插件推荐与使用指南:轻松实现可视化图表(Unity绘制折线图/柱状图/饼图)

【Unity笔记】Unity图表插件推荐与使用指南:轻松实现可视化图表(Unity绘制折线图/柱状图/饼图)

引言

在 Unity 项目中实现图表可视化(如折线图、柱状图、饼图)是数据展示和 UI 增强的常见需求,适用于游戏统计面板、教育 App 或模拟器仪表盘。Unity 内置工具(如 LineRenderer 或 UI Canvas)可手动绘制,但插件提供更高效的解决方案:快速配置、交互支持和跨平台渲染。2025 年,随着 Unity 6 的 Graph Toolkit 更新(Editor UI 增强),插件生态更成熟。

本指南基于 Unity 2022.3 LTS+(兼容 Unity 6),推荐 3 个主流插件:Graph And Chart(专业付费)、XCharts(开源免费)和ProChart(简易付费)。这些插件支持 2D/3D 图表、实时数据更新和 URP/HDRP。手动实现作为备选。教程包含完整步骤和代码示例,时间复杂度 O(n)(n 为数据点),性能友好(<1000 点/帧)。

插件推荐

以下基于 2025 年流行度和功能评估(Asset Store 评分 >4.5,下载量 >10k)。优先免费/开源。

插件名称类型价格核心功能适用场景评分/下载
Graph And Chart付费$502D/3D 折线/柱状/饼图/雷达图,支持动画、交互、自定义材质专业数据可视化,如游戏统计4.8/50k+
XCharts开源免费免费UGUI 基 10+ 图表类型(折线/柱状/饼图),参数化配置,支持实时更新轻量 UI 图表,如仪表盘4.7/100k+
ProChart付费$25饼图/散点/线图,支持 Canvas UI 和 3D 网格渲染简单交互图表,如数据报告4.6/20k+

选择建议

  • 初学者:XCharts(免费,易上手)。
  • 专业:Graph And Chart(功能全)。
  • 3D 需求:ProChart(网格支持)。

安装与基本设置

  1. Asset Store 导入
  • Window > Asset Store > 搜索插件名 > Import。
  • 对于 XCharts:GitHub 下载(https://github.com/Cysharp/XCharts) > Import .unitypackage。
  1. 项目设置
  • URP/HDRP:确保 Canvas Render Mode 为 Screen Space – Overlay。
  • 数据源:使用 List 或 ScriptableObject 配置数据。
  1. 示例场景
  • 创建 Canvas > 添加插件组件(如 XCharts 的 LineChart)。

使用指南:实现折线图/柱状图/饼图

以下以 XCharts(免费)为例,提供代码示例。其他插件类似(Graph And Chart 使用 ChartRenderer,ProChart 使用 ProChart prefab)。

1. 折线图(Line Chart)实现

折线图用于时间序列数据(如游戏分数趋势)。

步骤

  1. 添加 LineChart 组件到 Canvas 子对象。
  2. 配置数据系列(Series)。
using UnityEngine;
using XCharts.Runtime;
using System.Collections.Generic;

public class LineChartExample : MonoBehaviour
{
    private LineChart lineChart;

    void Start()
    {
        lineChart = GetComponent<LineChart>();

        // 配置 X 轴(类别)
        lineChart.xAxis0.data = new List<string> { "Q1", "Q2", "Q3", "Q4" };

        // 配置 Y 轴数据系列
        var series1 = new Line { name = "Sales" };
        series1.data = new List<float> { 10f, 20f, 15f, 30f };
        lineChart.AddSerie(series1);

        var series2 = new Line { name = "Profit" };
        series2.data = new List<float> { 5f, 15f, 10f, 25f };
        lineChart.AddSerie(series2);

        lineChart.RefreshChart();
    }

    // 动态更新
    public void UpdateData(float newValue)
    {
        if (lineChart.series.Count > 0)
        {
            lineChart.series[0].data.Add(newValue);
            lineChart.xAxis0.data.Add(Time.time.ToString("F0"));
            lineChart.RefreshChart();  // 刷新图表
        }
    }
}

效果:实时折线图,支持缩放/拖拽(内置交互)。

2. 柱状图(Bar Chart)实现

柱状图用于比较数据(如角色属性对比)。

步骤

  1. 添加 BarChart 组件。
  2. 设置堆叠或分组模式。
using UnityEngine;
using XCharts.Runtime;
using System.Collections.Generic;

public class BarChartExample : MonoBehaviour
{
    private BarChart barChart;

    void Start()
    {
        barChart = GetComponent<BarChart>();

        // X 轴类别
        barChart.xAxis0.data = new List<string> { "Strength", "Dexterity", "Intelligence" };

        // Y 轴数据
        var series1 = new Bar { name = "Player A", stackId = "stack1" };
        series1.data = new List<float> { 80f, 60f, 90f };
        barChart.AddSerie(series1);

        var series2 = new Bar { name = "Player B", stackId = "stack1" };
        series2.data = new List<float> { 70f, 85f, 65f };
        barChart.AddSerie(series2);

        barChart.RefreshChart();
    }
}

效果:堆叠柱状图,支持动画填充(SetAnimation)。

3. 饼图(Pie Chart)实现

饼图用于比例展示(如资源分配)。

步骤

  1. 添加 PieChart 组件。
  2. 配置扇区数据。
using UnityEngine;
using XCharts.Runtime;
using System.Collections.Generic;

public class PieChartExample : MonoBehaviour
{
    private PieChart pieChart;

    void Start()
    {
        pieChart = GetComponent<PieChart>();

        // 数据系列
        var series = new Pie { name = "Resources" };
        series.data = new List<PieData>
        {
            new PieData { name = "Gold", value = 40 },
            new PieData { name = "Wood", value = 30 },
            new PieData { name = "Stone", value = 20 },
            new PieData { name = "Food", value = 10 }
        };
        pieChart.AddSerie(series);

        pieChart.RefreshChart();
    }

    // 动态更新扇区
    public void UpdateSlice(string name, float newValue)
    {
        var data = pieChart.series[0].data as List<PieData>;
        var slice = data.Find(d => d.name == name);
        if (slice != null)
        {
            slice.value = newValue;
            pieChart.RefreshChart();
        }
    }
}

效果:3D 饼图,支持高亮/动画旋转。

手动实现备选(无插件)

如果避免依赖插件,使用 LineRenderer(折线/柱状)和自定义 Mesh(饼图)。

折线图手动绘制

using UnityEngine;

public class ManualLineChart : MonoBehaviour
{
    public LineRenderer lineRenderer;
    public Vector3[] dataPoints = { new Vector3(0, 10), new Vector3(1, 20), new Vector3(2, 15), new Vector3(3, 30) };

    void Start()
    {
        lineRenderer.positionCount = dataPoints.Length;
        lineRenderer.SetPositions(dataPoints);
    }
}

柱状图手动绘制

使用 Cube 预制体动态生成柱子。

饼图手动绘制(UI Canvas)

使用 Image Mask 和 Arc 绘制扇区(参考官方教程)。

高级技巧与优化

  • 交互:插件内置 Tooltip 和 Click 事件,支持数据钻取。
  • 性能:数据 >1000 点时,使用虚拟化渲染(Graph And Chart 支持)。
  • 跨平台:WebGL 测试 Canvas 兼容;移动端降低分辨率。
  • 集成:与 UIElements(Unity 6 Graph Toolkit)结合,实现 Editor 图表。

资源链接

  • XCharts GitHub:https://github.com/Cysharp/XCharts (开源教程)。
  • Graph And Chart 文档:https://www.chartandgraph.com/ (视频示例)。
  • 官方 Pie Chart 教程:https://docs.unity3d.com/Manual/UIE-pie-chart.html
  • YouTube 教程:搜索 “Unity XCharts Tutorial”(Part 1: Basic Setup)。

通过这些插件/方法,Unity 图表实现简单高效。如果需要特定插件的深度代码或 3D 图表示例,请提供更多细节!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注