用Unity做仿真,这款图表插件我不允许你不知道

简介: 用Unity做虚拟仿真项目,总会遇到要画图表的需求,如果从头开发,那么工作量是很大的。有这么一款插件,就免去了我们重复造轮子的工作,那就是XCharts插件。XCharts插件是一款基于Unity3D的UGUI系统的插件,可以绘制折线图、曲线图、饼状图、雷达图、散点图、热力图等等,功能强大,但是参数超多 - -,下面就来学习一下这个插件的使用吧。

一、前言

用Unity做虚拟仿真项目,总会遇到要画图表的需求,如果从头开发,那么工作量是很大的。

有这么一款插件,就免去了我们重复造轮子的工作,那就是XCharts插件。

XCharts插件是一款基于Unity3D的UGUI系统的插件,可以绘制折线图、曲线图、饼状图、雷达图、散点图、热力图等等,功能强大,但是参数超多 - -,下面就来学习一下这个插件的使用吧。


二、原文

原文链接:blog.csdn.net/monitor1394…大佬花费一年多的时间开发出来的插件,实在是太强了,但是最让我佩服的不是他的技术,而是他能起的比娃早睡的比娃晚,哈哈哈


三、快速入门


3-1、首先下载安装包unitypackage包下载

网络异常,图片无法展示
|
XChartsDemo 是示例Demo,推荐导入,可以查看各类图表的效果


3-2、将资源包导入到Unity中

网络异常,图片无法展示
|


3-3、Demo中有各种图表的效果,如下图所示:

网络异常,图片无法展示
|


3-4、搭建简单场景

在Hierarchy视图下,先选中Canvas,然后选择Create→XCharts->LineChart: 注意,Chart需要建在Canvas层级下面,因为这个图标是以UGUI为基础的。

网络异常,图片无法展示
|

  • LineChart:折线图
  • BarChart:柱状图
  • PieChart:饼图
  • RadarChart:雷达图
  • ScatterChart:散点图
  • HeatmapChart:热力图
  • GaugeChart:仪表盘
  • RingChart:趋势图
  • PolarChart:极区图
  • LiquidChart:液位图

一个简单的折线图就出来了

网络异常,图片无法展示
|
在Inspector视图可以查看调整各个组件的参数,Game 视图会实时反馈调整的效果。

网络异常,图片无法展示
|

*注意:不同版本之间可能界面有些区别,但是功能都差不多的

这个是新版本的界面:

网络异常,图片无法展示
|


3-5、 修改参数

将x轴和y轴的值进行修改:

修改x轴的值:

网络异常,图片无法展示
|

y轴的值修改在:

网络异常,图片无法展示
|
Series→Serie0→Data:

比如:

网络异常,图片无法展示
|
如果想要都显示整数: 设置YAxis 0→Interval: 设置为1即可。
网络异常,图片无法展示
|
网络异常,图片无法展示
|
这个在Inspector面板修改属性,在Game 和Scene视图都是实时显示的,不用运行程序


四、使用代码构建图表


4-1、代码

using System.Collections.Generic;
using UnityEngine;
using XCharts;
public class XchartsDemo : MonoBehaviour
{
    public GameObject chart;
    void Start()
    {
        CreateChart();
    }
    //创建图表
    private void CreateChart()
    {
        List<string> xAxisValue = new List<string>();
        xAxisValue.Add("周一");
        xAxisValue.Add("周二");
        xAxisValue.Add("周三");
        xAxisValue.Add("周四");
        xAxisValue.Add("周五");
        List<float> yAxisValue = new List<float>();
        yAxisValue.Add(8);
        yAxisValue.Add(7);
        yAxisValue.Add(5);
        yAxisValue.Add(7);
        yAxisValue.Add(8);
        CreateChart(chart, "折线图", "星期数", "工作时间", SerieType.Line, LineType.Normal, xAxisValue, yAxisValue);
    }
    /// <summary>
    /// 生成图表
    /// </summary>
    /// <param name="_chart">图表组件</param>
    /// <param name="_title">图表表头</param>
    /// <param name="_boundarygap">坐标轴是否留白</param>
    /// <param name="xAxisName">x轴的轴名</param>
    /// <param name="yAxisName">y轴的轴名</param>
    /// <param name="_serietype">设置是什么类型图表</param>
    /// <param name="_linetype">什么类型线段</param>
    /// <param name="xAxisValue">x轴的值</param>
    /// <param name="yAxisValue">y轴的值</param>
    public void CreateChart(GameObject _chart, string _title, string xAxisName, string yAxisName, SerieType _serietype,
        LineType _linetype, List<string> xAxisValue, List<float> yAxisValue)
    {
        var chart = _chart.GetComponent<LineChart>();
        //表头设置
        chart.title.show = true;
        chart.title.text = _title;
        //背景图
        chart.background.gameObject.SetActive(chart.background.show);
        //提示框
        chart.tooltip.show = true;
        chart.tooltip.titleFormatter = " ";
        //图例组件
        chart.legend.show = false;
        //x轴的设置
        chart.xAxis0.show = true;
        chart.xAxis0.type = Axis.AxisType.Category;
        chart.xAxis0.splitNumber = 11;
        chart.xAxis0.boundaryGap = false;
        chart.xAxis0.axisName.show = true;
        chart.xAxis0.axisName.name = xAxisName;
        chart.xAxis1.show = false;
        //y轴的设置
        chart.yAxis0.show = true;
        chart.yAxis0.type = Axis.AxisType.Value;
        chart.yAxis0.show = true;
        chart.yAxis0.splitNumber = 10;
        chart.yAxis0.interval = 1;
        chart.yAxis0.axisLabel.show = true;
        chart.yAxis0.axisName.show = true;
        chart.yAxis0.axisName.name = yAxisName;
        chart.yAxis1.show = false;
        //标记的图形
        SerieSymbol sy = new SerieSymbol();
        sy.show = true;
        sy.type = SerieSymbolType.Circle;
        sy.gap = 2;
        sy.sizeType = SerieSymbolSizeType.Custom;
        sy.size = 7;
        //线段的样式设置
        LineStyle ls = new LineStyle();
        ls.show = true;
        ls.type = LineStyle.Type.Solid;
        ls.toColor = new Color32(18, 240, 111, 255);
        ls.toColor2 = new Color32(244, 29, 140, 255);
        ls.width = 2.5f;
        //图表上的文本标签的样式
        SerieLabel sl = new SerieLabel();
        sl.show = true;
        sl.position = SerieLabel.Position.Outside;
        sl.offset = new Vector3(0, 20, 0);
        sl.lineWidth = 25;
        //图表动画
        SerieAnimation sa = new SerieAnimation();
        sa.enable = true;
        //y轴的值的设置
        chart.series.list[0].animation = sa;
        chart.series.list[0].label = sl;
        chart.series.list[0].lineStyle = ls;
        chart.series.list[0].symbol = sy;
        chart.series.list[0].name = "";
        chart.series.list[0].lineType = _linetype;
        //清空值
        chart.RemoveData();
        chart.AddSerie(_serietype);
        //添加x轴的值
        for (int i = 0; i < xAxisValue.Count; i++)
        {
            chart.AddXAxisData(xAxisValue[i]);
        }
        //添加y轴的值
        foreach (float item in yAxisValue)
        {
            chart.AddData(0, item);
        }
    }
}
复制代码


4-2、效果图

网络异常,图片无法展示
|


五、后言

还有很多参数效果可以用来尝试,作者将所有可能用到的接口参数都开放出来了,只需要获取到LineChart组件,然后就可以进行各种设置

真正的运用到项目中,还需要大家自己多摸索了。



相关文章
|
3月前
|
传感器 开发工具 vr&ar
ManoMotion⭐二、Unity手势识别插件简介,及效果录屏
ManoMotion⭐二、Unity手势识别插件简介,及效果录屏
|
2月前
|
图形学 C++ C#
Unity插件开发全攻略:从零起步教你用C++扩展游戏功能,解锁Unity新玩法的详细步骤与实战技巧大公开
【8月更文挑战第31天】Unity 是一款功能强大的游戏开发引擎,支持多平台发布并拥有丰富的插件生态系统。本文介绍 Unity 插件开发基础,帮助读者从零开始编写自定义插件以扩展其功能。插件通常用 C++ 编写,通过 Mono C# 运行时调用,需在不同平台上编译。文中详细讲解了开发环境搭建、简单插件编写及在 Unity 中调用的方法,包括创建 C# 封装脚本和处理跨平台问题,助力开发者提升游戏开发效率。
234 0
|
5月前
|
图形学
【推荐100个unity插件之9】分享几个完全免费的2D角色动画生成器(推荐收藏)
【推荐100个unity插件之9】分享几个完全免费的2D角色动画生成器(推荐收藏)
309 0
|
5月前
|
数据可视化 大数据 API
【推荐100个unity插件之22】基于UGUI的功能强大的简单易用的Unity数据可视化图表插件——XCharts3.0插件的使用
【推荐100个unity插件之22】基于UGUI的功能强大的简单易用的Unity数据可视化图表插件——XCharts3.0插件的使用
193 0
|
5月前
|
自然语言处理 搜索推荐 API
【推荐100个unity插件之21】unity实现多语言切换功能——Localization插件的使用
【推荐100个unity插件之21】unity实现多语言切换功能——Localization插件的使用
197 0
|
5月前
|
JSON 开发框架 API
【推荐100个unity插件之20】一个强大的JSON处理库——Newtonsoft.Json(也称为Json.NET)
【推荐100个unity插件之20】一个强大的JSON处理库——Newtonsoft.Json(也称为Json.NET)
477 0
|
5月前
|
图形学
【推荐100个unity插件之19】武器拖尾特效插件——Pocket RPG Weapon Trails(2d 3d通用)
【推荐100个unity插件之19】武器拖尾特效插件——Pocket RPG Weapon Trails(2d 3d通用)
108 0
|
5月前
|
数据可视化 C# 图形学
【推荐100个unity插件之18】Unity 新版输入系统Input System的基础使用
【推荐100个unity插件之18】Unity 新版输入系统Input System的基础使用
161 0
|
5月前
|
图形学
【推荐100个unity插件之17】具有可破坏/砍倒unity地形树木能力的破坏系统,实现unity砍树效果 —— DestroyIt - Destruction System
【推荐100个unity插件之17】具有可破坏/砍倒unity地形树木能力的破坏系统,实现unity砍树效果 —— DestroyIt - Destruction System
143 0
|
5月前
|
vr&ar 图形学
【推荐100个unity插件之16】3D物品描边效果——Quick Outline免费插件
【推荐100个unity插件之16】3D物品描边效果——Quick Outline免费插件
212 0
下一篇
无影云桌面