【通知】本文的新升级版发布于 https://blog.csdn.net/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,以下三张图片是连贯的变化,是不是可以用来呈现心电图数据呢?
--------
【通知】本文的新升级版发布于 https://blog.csdn.net/xxxhhhyxy/article/details/117389897,并且已有新的工程包可供下载,请诸位移架观看。
Unity工程链接
最后
以上就是耍酷鸵鸟最近收集整理的关于使用Unity UGUI根据实时数据动态绘制图线(心电图)的全部内容,更多相关使用Unity内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复