Unity绘制二维动态曲线

 更新时间:2019年03月14日 08:38:16   作者:凯尔八阿哥  
这篇文章主要为大家详细介绍了Unity绘制二维动态曲线,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

一、前言

之前用Line Render实现过这个动态曲线的绘制,使用这个实在太不方便了,一直寻思怎么在一张图片上通过控制图片的像素值实现曲线的动态绘制。参考了Unity的官网教程实现了这个,效果图如图所示:

这样实现的效果比LineRender 要好,并且不怎么消耗计算和渲染

二、实现

1、代码创建一个背景贴图,并将这个贴图给UGUI的RawImage控件

//创建背景贴图
  widthPixels = (int)(Screen.width * width);
  heightPixels = (int)(Screen.height * height);
  bgTexture = new Texture2D(widthPixels, heightPixels);
 
  bgImage.texture = bgTexture;
  bgImage.SetNativeSize();

2、计算曲线数据列表对应贴图中的像素索引

int i;
  int j;
 
  if (Mathf.Abs(to.x - from.x) > Mathf.Abs(to.y - from.y))
  {
   // Horizontal line.
   i = 0;
   j = 1;
  }
  else
  {
   // Vertical line.
   i = 1;
   j = 0;
  }
 
  int x = (int)from[i];
  int delta = (int)Mathf.Sign(to[i] - from[i]);
  while (x != (int)to[i])
  {
   int y = (int)Mathf.Round(from[j] + (x - from[i]) * (to[j] - from[j]) / (to[i] - from[i]));
 
   int index;
   if (i == 0)
    index = y * widthPixels + x;
   else
    index = x * widthPixels + y;
 
   index = Mathf.Clamp(index, 0, pixelsDrawLine.Length - 1);
   pixelsDrawLine[index] = color;
 
   x += delta;
  }

3、在Update里实时更新贴图的像素值

Array.Copy(pixelsBg, pixelsDrawLine, pixelsBg.Length);
 
  // 基准线
  DrawLine(new Vector2(0f, heightPixels * 0.5f), new Vector2(widthPixels, heightPixels * 0.5f), zeroColor);
 
  for (int i = 0; i < listPoints.Count-1; i++)
  {
   Vector2 from = listPoints[i];
   Vector2 to = listPoints[i + 1];
   DrawLine(from, to, colorLine1);
  }
 
  bgTexture.SetPixels32(pixelsDrawLine);
  bgTexture.Apply();

三、总结

1、比使用Line Render要节省计算和渲染

2、真正实现了二维的曲线绘制,Line Render始终是3维的

3、曲线坐标的X和Y的值不能超过贴图的宽度和高度,否则不能绘制

4、完整的工程下载地址:Unity绘制二维动态曲线

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(net,net core,C#)

    10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(net,net core,C#)

    这篇文章主要介绍了10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(net,net core,C#),本文给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 深入浅出掌握Unity ShaderLab语法基础

    深入浅出掌握Unity ShaderLab语法基础

    Unity中所有Shader文件都通过一种陈述性语言进行描述,称为“ShaderLab”, 这篇文章主要介绍了Unity图形学之ShaderLab入门基础,需要的朋友可以参考下
    2023-05-05
  • C#中深拷贝和浅拷贝的介绍与用法

    C#中深拷贝和浅拷贝的介绍与用法

    本文详细讲解了C#中深拷贝和浅拷贝的介绍与用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • C#中除去所有在HTML元素中标记

    C#中除去所有在HTML元素中标记

    C#中除去所有在HTML元素中标记...
    2007-03-03
  • C# 的关键字详细介绍

    C# 的关键字详细介绍

    本文将详细介绍C#关键字的应用,可供有需要的朋友参考
    2012-11-11
  • 教你创建一个带诊断工具的.NET镜像

    教你创建一个带诊断工具的.NET镜像

    本文编写的初衷是因为在群里有很多小伙伴遇到生产环境性能问题的时候,.NET的runtime镜像中没有带一些工具,安装和使用起来很麻烦,所以分享一些我们公司内部一些技巧,对.NET镜像带诊断工具相关知识感兴趣的朋友一起看看吧
    2022-07-07
  • Unity 百度AI实现人像动漫化效果

    Unity 百度AI实现人像动漫化效果

    这篇文章主要介绍了Unity如何接入百度AI接口, 运用对抗生成网络技术,为用户量身定制千人千面的二次元动漫形象,并支持通过参数设置,生成二次元动漫人像。感兴趣的可以学习一下
    2022-01-01
  • C#通过指针读取文件的方法

    C#通过指针读取文件的方法

    这篇文章主要介绍了C#通过指针读取文件的方法,涉及C#针对文件的相关操作技巧,需要的朋友可以参考下
    2015-06-06
  • C# 异步返回类型的几种方式

    C# 异步返回类型的几种方式

    异步编程已经成为一种重要的编程范式,本文主要介绍了C#异步返回类型的几种方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03
  • C#实现多线程下载文件的方法

    C#实现多线程下载文件的方法

    这篇文章主要介绍了C#实现多线程下载文件的方法,实例分析了C#多线程及文件传输的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08

最新评论