失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 使用Unity UGUI根据实时数据动态绘制图线(心电图)

使用Unity UGUI根据实时数据动态绘制图线(心电图)

时间:2024-03-31 22:31:07

相关推荐

使用Unity UGUI根据实时数据动态绘制图线(心电图)

【通知】本文的新升级版发布于/xxxhhhyxy/article/details/117389897,并且已有新的工程包可供下载,请诸位移架观看。

同志们想我了吗?!我想也没有。

最近因为工程需要,通过UGUI设计了能够根据实时数据更新的动态图线,也就是像心电图那样。我从凯尔八阿哥的博客中得到绘制图线的启发,但添加了自己的实时设计,并且消耗的内存较小。

1.首先创建一个UI ==>RawImage作为呈现图像的窗口。

2.使用代码创建texture,赋给RawImage,作为呈现图线的纹理。

//初始化纹理m_texture = new Texture2D(graphWidth, graphHeight);m_rawImage.texture = m_texture;m_rawImage.SetNativeSize();

3.创建一个一维颜色数组(用于迭代图线)和一个一维列表(用于记录获取的数据)。

pixels = new Color[graphWidth * graphHeight];data = new List<int>();data.Add(0);//0 时刻接受的数据值为0

4.设置图线背景颜色

for (int i = 0; i < pixels.Length; i++){pixels[i] = GraphBackground;}m_texture.SetPixels(pixels);m_texture.Apply();

5.在update中接收数据并绘画图线

data.Add(datapoint);for (int j = data.Count - 1; j >= Mathf.Max(0, data.Count - graphWidth); j--){pixels[data[j] * graphWidth + graphWidth - data.Count + j] = LineColor;}m_texture.SetPixels(pixels);m_texture.Apply();for (int j = data.Count - 1; j >= Mathf.Max(0, data.Count - graphWidth); j--){pixels[data[j] * graphWidth + graphWidth - data.Count + j] = GraphBackground;}

倘若高度200,宽度200,那么整幅图共有40000点。

正常情况渲染时计算出40000个点后对整张图片进行渲染更新。而我在每一帧渲染完图线之后立刻沿着图线点、用背景色重新覆盖了一遍——只是将图线点重新赋值为背景色。也就是说我每一帧只有400次像素赋值——200次划线、200次擦除。

而且同样每帧只调用一次apply()。

这次没办法上传gif,以下三张图片是连贯的变化,是不是可以用来呈现心电图数据呢?

--------

【通知】本文的新升级版发布于/xxxhhhyxy/article/details/117389897,并且已有新的工程包可供下载,请诸位移架观看。

Unity工程链接

如果觉得《使用Unity UGUI根据实时数据动态绘制图线(心电图)》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。