Unity3D 画笔实现系列01-LineRender
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity3D 画笔实现系列01-LineRender相关的知识,希望对你有一定的参考价值。
前言:刚从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 }
以上是关于Unity3D 画笔实现系列01-LineRender的主要内容,如果未能解决你的问题,请参考以下文章