Unity自定义UI组件(十) 折线图
来源:互联网 发布:java socket拒绝ip连接 编辑:程序博客网 时间:2024/05/19 03:23
前言
在工程三维可视化领域,用图表展示数据较为常用,近期看有人在论坛里所求折线图插件,于是我就把折线图(LineChartGraph)也加入了SpringGUI中,这里我简单介绍一下,便于有需要的人使用。
组件效果
- 动态效果
- 模式一
- 模式二
- 模式三
- 案例
组件特点
- 无需Asset资源
- 无需制作Prefab
- 支持动态流式数据
- 工厂模式搭建,便于新的样式的接入
主要内容
- 组件实现
- 多样式控制
- 组件的使用
详细讲解
组件实现
经过之前多篇组件开发的讲解了,以后我就不再讲解具体的代码,以下几点如果你有不懂,可以去看自定义组件的前两篇都有讲解。
坐标轴
略..看源码或者见Unity自定义UI组件(二)函数图篇(下)
网格
略..看源码或者见Unity自定义UI组件(二)函数图篇(下)
折线
略..看源码或者见Unity自定义UI组件(二)函数图篇(下)
动态数据输入
支持自定义动态数据的输入,我们需要利用一个数据解析器来充当中介者,数据源无需直接输入折线图组件,这样不利于组件的封装。客户端持有一个中介者,通过中介者,在中介者中重写数据解析模块,再将数据流输入折线图组件绘制。
- 案例类型
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
- 中介者
如果T泛型传的类型是你自己的类型,要重写Inject方法保证返回的Vector2位Vector2.zero到Vector2.one之间
因为组件的左下角是(0,0)点,右上角是(1,1)点
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
替换新的静态数据
全盘替换新的数据,只需要在中介者中通过解析之后,将折线图中的数据覆盖并重新调用绘制方法绘制。我们提供重载函数,方便一条或者多条折线的操作。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
实时动态数据
实时动态数据,每次只传入一个顶点的数据,因此我们需要制作出一个比较不违和的动画,就需要处理帧动画,比如每传入一个点,触发一个二十帧的动画,通过绘制二十次折线,以达到动画的效果。这里的帧动画我们依靠代码来完成。
在折线图向左移动时,第一个顶点和最后一个顶点要实时获取Y值,以保证效果,中间的顶点我们只需要每帧减少固定的距离即可,
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
接口开发
随着SpringGUI组件一直迭代增加新的组件,我们应该逐渐意识到开发自己的组件方便别人使用的时候,有些时候需要强制输入固定合适的数据,如果没有这样做,那么这个组件就不符合设计模式中的开放封闭原则,如果我们没有固定的数据格式,那么别人在使用组件的时候就得根据自己的开发需求去设计数据的输入,比如本篇的折线图,绘制折线图需要一串顶点流数据,但是实际的数据可能是(x,y)(日期,数量)(月份,增长率)等等,因此我们需要强制输入固定的数据以封装了变化,关闭修改,开放拓展。只需要用户自行通过数据中介将数据拓展转化为固定数据(在LineChartGraph组件中我们将数据格式规定为左下角(0,0),右上角(1,1)),这样使用组件时避免了更改组件的代码,而只需要通过数据中介转化格式并传递给组件。
- API
- Inject 注入普通数据
- RemoveLine 移除某一条折线
- Replace 替换某一条折线的顶点
- InjectVertexStream 传入流式顶点数据
- ShowUnit 显示单位
多样式控制
接口开发中我们遵循开放封闭原则,在多样式控制中为了便于拓展和修改,我们应该采用工厂模式,每一种样式只是绘制折线网格时算法不一样、或者是绘制背景网格不一致再或是绘制坐标轴不一致,但是步骤都是一致的,我们可利用抽象工厂(我们用接口代替),工厂中可以绘制坐标轴,网格,折线,客户端只需要持有工厂接口,然后根据实际需要调用对应的工厂来绘制,工厂模式也是遵循开放封闭原则的一种设计模式。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
然后再客户端我们只需要持有ILineChart即可,然后根据当前所选的类型由对应工厂绘制
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
组件的使用
这里我们展示一下基础的使方法,以上提到的API在代码的Example例子中具体的查看
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
后续拓展
后续打算开发一个表格组件,实现简单的excel的功能。
如果你有什么需要的组件,不妨在评论区留言,我来实现。
- Unity自定义UI组件(十) 折线图
- Unity自定义UI组件(十) 折线图
- Unity自定义UI组件(十一) 雷达图、属性图
- Unity自定义UI组件(十一) 雷达图、属性图
- Unity自定义UI组件(一)函数图篇(上)
- Unity自定义UI组件(二)函数图篇(下)
- Unity自定义UI组件(一)函数图篇(上)
- Unity自定义UI组件(二)函数图篇(下)
- Unity自定义UI组件(十二) 条形图篇
- Unity自定义UI组件(三)饼图篇
- Unity自定义UI组件(三)饼图篇
- Unity自定义UI组件(四)双击按钮、长按按钮
- Unity自定义UI组件(六)日历、日期拾取器
- Unity自定义UI组件(八) 颜色拾取器(上)
- Unity自定义UI组件(九) 颜色拾取器(下)
- Unity自定义UI组件(四)双击按钮、长按按钮
- Unity自定义UI组件(六)日历、日期拾取器
- Unity自定义UI组件(八) 颜色拾取器(上)
- 简述STL-->空间配置器
- 292. Nim Game
- ISO之日历的使用
- sql语句面试题(查询按照申请日期倒序排列的前10个记录)
- Source Insight 静态检查
- Unity自定义UI组件(十) 折线图
- Pandas
- 内存管理
- 程序员必读书单
- set集合容器
- 使用 Rest-Assured 测试 REST API
- 装饰者模式 | Decorator Pattern
- 希尔排序
- Unity自定义UI组件(十一) 雷达图、属性图