码迷,mamicode.com
首页 > 编程语言 > 详细

Unity3D 画笔实现系列01-LineRender

时间:2017-12-03 13:56:46      阅读:1493      评论:0      收藏:0      [点我收藏+]

标签:als   不能   cli   canvas   gif   设置   bezier   方法   src   

前言:刚从Python转到U3D时,第一个项目涉及到画线,刚开始想那还不简单吗,不就是获取位置后着色吗,H5中的Canvas就能实现,当我看了Unity的文档后一脸懵逼,居然没有相关的方法。没办法只能在网上找,涉及到画线的很多,各种坑。

Unity画线最简单的实现方法LineRender组件:

     LineRender实现起来比较简单,

技术分享图片
 1 public class line : MonoBehaviour
 2 {
 3     /*
 4      LineRenderer画线优点是简单,易控制,在移动端效果较好
 5      缺点:1.线宽不能高度定制(毛笔效果不好实现),
 6      2.不能重复贴图(蜡笔)(2017版本后贴图可以重复但效果不是很好--Texture Mode 设置成repeat),
 7      3,橡皮擦实习起来比较复杂:
 8         1.再用一个LineRenderer画白色线条
 9         2.把图片渲染到RendererTexture上
10         3.利用shader扣掉白色(缺点不能画白色)
11      4,保存方法自能截图
12      5,保存恢复记录的东西太多了     
13     */
14     private GameObject lineRendererObj;
15     private LineRenderer lineRenderer;
16     private List<Vector3> worldPos = new List<Vector3>();
17     public GameObject lineRendererPre;
18     private bool moving;
19     private void Update()
20     {
21 
22         #region 画笔
23         if (Input.GetMouseButtonDown(0))
24         {
25             moving = true;
26             InitLine(Color.red);
27 
28         }
29         if (Input.GetMouseButtonUp(0))
30         {
31             moving = false;
32             worldPos.Clear();
33         }
34         #endregion
35 
36 
37 
38         #region 橡皮
39         if (Input.GetMouseButtonDown(1))
40         {
41             moving = true;
42             InitLine(Color.white);
43 
44         }
45         if (Input.GetMouseButtonUp(1))
46         {
47             moving = false;
48             worldPos.Clear();
49         } 
50         #endregion
51         if (moving)
52         {
53             Vector3 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);//取得点击点的世间坐标
54             pos.z = 0;//设置为0效果更好
55             if (worldPos.Count > 1)
56             {
57                 if (Vector3.Distance(pos, worldPos[worldPos.Count - 1]) < 0.08f)
58                 {
59                     return;
60                 }
61             }
62            
63                 worldPos.Add(pos);
64              Draw();
65             //BezierPathDraw();//贝塞尔曲线优化画笔效果差别不大,很卡
66 
67         }
68     }
69 
70     private void InitLine(Color color)
71     {
72         lineRendererObj = Instantiate(lineRendererPre, this.transform);
73         lineRenderer = lineRendererObj.GetComponent<LineRenderer>();
74         lineRenderer.numCapVertices = 5;//控制在结尾处添加的点数越多越圆滑
75         lineRenderer.numCornerVertices = 5;//控制在折角处添加的点数越多越圆滑
76         lineRenderer.startColor = color;//开始的颜色
77         lineRenderer.endColor = color;//结束的颜色 
78         lineRenderer.startWidth = 0.2f;//开始的宽度
79         lineRenderer.endWidth = 0.2f;//结束的宽度
80     }
81     private void Draw()
82     {
83        lineRenderer.positionCount = worldPos.Count;
84        lineRenderer.SetPositions(worldPos.ToArray());
85     }
View Code

 

Unity3D 画笔实现系列01-LineRender

标签:als   不能   cli   canvas   gif   设置   bezier   方法   src   

原文地址:http://www.cnblogs.com/PandaHome/p/7965840.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!