国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

Unity繪制二維動(dòng)態(tài)曲線

2020-01-24 00:07:05
字體:
供稿:網(wǎng)友

一、前言

之前用Line Render實(shí)現(xiàn)過這個(gè)動(dòng)態(tài)曲線的繪制,使用這個(gè)實(shí)在太不方便了,一直尋思怎么在一張圖片上通過控制圖片的像素值實(shí)現(xiàn)曲線的動(dòng)態(tài)繪制。參考了Unity的官網(wǎng)教程實(shí)現(xiàn)了這個(gè),效果圖如圖所示:

這樣實(shí)現(xiàn)的效果比LineRender 要好,并且不怎么消耗計(jì)算和渲染

二、實(shí)現(xiàn)

1、代碼創(chuàng)建一個(gè)背景貼圖,并將這個(gè)貼圖給UGUI的RawImage控件

//創(chuàng)建背景貼圖  widthPixels = (int)(Screen.width * width);  heightPixels = (int)(Screen.height * height);  bgTexture = new Texture2D(widthPixels, heightPixels);   bgImage.texture = bgTexture;  bgImage.SetNativeSize();

2、計(jì)算曲線數(shù)據(jù)列表對(duì)應(yīng)貼圖中的像素索引

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里實(shí)時(shí)更新貼圖的像素值

Array.Copy(pixelsBg, pixelsDrawLine, pixelsBg.Length);   // 基準(zhǔn)線  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();

三、總結(jié)

1、比使用Line Render要節(jié)省計(jì)算和渲染

2、真正實(shí)現(xiàn)了二維的曲線繪制,Line Render始終是3維的

3、曲線坐標(biāo)的X和Y的值不能超過貼圖的寬度和高度,否則不能繪制

4、完整的工程下載地址:Unity繪制二維動(dòng)態(tài)曲線

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 安西县| 垫江县| 长海县| 永丰县| 英吉沙县| 东安县| 永安市| 昆明市| 哈尔滨市| 神农架林区| 扶风县| 红桥区| 阿巴嘎旗| 云和县| 额尔古纳市| 金溪县| 新乡县| 山东省| 黄骅市| 花莲市| 富顺县| 盐城市| 临泽县| 确山县| 佛教| 团风县| 三都| 沅陵县| 湘乡市| 望城县| 南华县| 阿瓦提县| 普安县| 绿春县| 隆昌县| 安仁县| 涞源县| 咸丰县| 紫阳县| 新河县| 辉南县|