Unity3d 实现用LineRenderer画线 不依赖摄像机位置

原创 2012年03月30日 13:14:54

Unity3d 实现用LineRenderer画线 不依赖摄像机位置

用LineRenderer画线难点: 鼠标坐标和屏幕坐标之间的转换   我是弄了很多天才弄好的

跟大家分享一下

using UnityEngine;

using System.Collections;

using System.Collections.Generic;



public class DrawLine: MonoBehaviour {



	private Event e;

	private int pointCnt = 0;

	public Color c1 = Color.red;

	public Color c2 = Color.blue;

	

	public GameObject obj;

	

	private LineRenderer lineRenderer;

	private LineRenderer[] lineRendArray;

	private Color[] color;

	public int maxLine = 5;

	private int index = 0;

	private bool flag = true;

	

	

	// 画线坐标之间的转换   20120330-------------

	private Vector3 screenPoint;

	private Vector3 scanPos;

	private Vector3 offset;

	//  20120330-----------------------------------



    void Start () {

	     e = Event.current; 

		 scanPos = obj.transform.position;

		 lineRenderer = (LineRenderer)obj.GetComponent("LineRenderer");

		

		// lineRenderer = (LineRenderer)gameObject.AddComponent("LineRenderer");

		 lineRenderer.material = new Material (Shader.Find("Particles/Additive"));

	     lineRenderer.SetColors(c1, c2);

	     lineRenderer.SetWidth(0.02F, 0.02F);

	     lineRenderer.SetVertexCount(0); 

		 lineRendArray = new LineRenderer[maxLine];

		 color = new Color[8];

	   	 color[0] = Color.yellow;

		 color[1] = Color.blue;

		 color[2] = Color.cyan;

		 color[3] = Color.gray;

		 color[4] = Color.green;

		 color[5] = Color.grey;

		 color[6] = Color.magenta;

		 color[7] = Color.red;

		 

    }

    

	void Update()

	{



		if(e != null){

			if (e.type == EventType.MouseDown){

	

				//////////////20120330---------------------

				////坐标之间的转换

				Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

				print("new mouse point: "+mousePos);

				 screenPoint = Camera.main.WorldToScreenPoint(scanPos);

  	    		 offset = scanPos - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));

				 Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);

	 		     Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint); // +offset;

				//////////////20120330-----------------------

				

				if(index < maxLine){

					if(flag){

						GameObject newObj;

						newObj = (GameObject)Instantiate(obj, obj.transform.position, obj.transform.rotation);

						lineRenderer = (LineRenderer)newObj.GetComponent("LineRenderer");

						int n = Random.Range(1, 8);

						c1 = color[n-1];

						n = Random.Range(1,8);

						c2 = color[n-1];

						lineRenderer.SetColors(c1, c2);

						lineRenderer.SetWidth(0.02F,0.02F);

						lineRendArray[index] = lineRenderer;

					}

				}

				else{

					index = 0;

					flag = false;

				}

				pointCnt = 0;

				DrawRenderLine(lineRendArray[index], curPosition);

				index++;

			}

			if (e.type == EventType.MouseDrag){

				

				//////  20120330---------------------------

				Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);

				print("curScreenPoint: "+curScreenPoint);

	 		    Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint);// + offset;

	   		

				////// 20120330-----------------------------

				if (index == 0)

					DrawRenderLine(lineRendArray[index], curPosition);

				else

					DrawRenderLine(lineRendArray[index-1], curPosition);

			}

			if (e.type == EventType.MouseUp){



			}

		}

		

		

	}



    void OnGUI () {

    	e = Event.current;

    }

	

	void DrawRenderLine(LineRenderer line, Vector3 vect3){



		Vector3 newPos = vect3;

        line.SetVertexCount(++pointCnt);

        line.SetPosition(pointCnt-1, newPos);

		print("new point: "+newPos);

	}

}


 

版权声明:本文为博主原创文章,未经博主允许不得转载。

Unity3D 画线插件 Vectrosity_Simple2DLine

Vectrosity是一个很方便的画线插件,用它我们可以画出2D,3D,贝塞尔,圆,椭圆等各种线条图案。 首先导入Vectrosity,导入后是这样的 打开Sences,看第一个Demo Vectr...
  • G__Dragon
  • G__Dragon
  • 2014年03月12日 14:42
  • 5460

Unity中画实线与虚线

以前用过Vectrosity来画过线,但时间久了忘记怎么用了,也忘记能不能画虚线了。试了一下Unity的LineRenderer加上一个材质来画虚线,但是它是把我们的贴图给拉伸覆盖创建出来的mesh的...
  • Cheng624
  • Cheng624
  • 2016年11月24日 14:58
  • 2350

unity--鼠标画线、画图实现

在untiy有时候需要用到画线,比如说在做签名或者画图的时候,主要用的组件就是LineRenderer实现代码 using UnityEngine; using System.Collections...
  • liang_704959721
  • liang_704959721
  • 2015年04月03日 09:10
  • 4455

unity3D 鼠标点击拖动画线(平面)

using UnityEngine; using System.Collections; public class Test : MonoBehaviour { public Material...
  • juan_bo
  • juan_bo
  • 2016年10月13日 16:24
  • 1025

unity使用line renderer画线

雨松MOMO原创文章如转载,请注明:转载至我的独立域名博客雨松MOMO程序研究院,原文地址:http://www.xuanyusong.com/archives/561 ...
  • dzyi_
  • dzyi_
  • 2014年04月04日 15:07
  • 46158

unity 鼠标实时画箭头

c端的QQ与微信截图里都有个拖拽鼠标画箭头的功能以至于好做标注,其实unity也可以实现这个功能,亲测在webgl端与pc端可用,移动端由于感觉没意义没测试,我觉得应该没啥问题,主要思路就是:箭头由线...
  • u013172864
  • u013172864
  • 2017年12月21日 10:23
  • 125

<Unity3D>Unity3D中LineRenderer的使用

LineRenderer线渲染器主要是用于在3D中渲染线段,虽然我们也可以使用GL图像库来渲染线段,但是使用LineRenderer我们可以对线段进行更多的操作,例如:设置颜色,宽度等。在这里要注意L...
  • u010832643
  • u010832643
  • 2016年09月26日 15:57
  • 6765

LineRenderer在unity5.5中的使用,新手使用攻略

因为项目原因,需要用到LineRenderer,所以学习了这方面的知识。 最方便的,当然是去看官方文档,或者unity圣典,但是还有一篇博客,对LineRenderer的使用做出了简洁的介绍,尤其是...
  • MoMoLily
  • MoMoLily
  • 2017年05月07日 09:32
  • 2729

【Unity Shader】如何修改LineRenderer与TrailRenderer 中的颜色

LineRender和TrailRender是两个好东西,很多Unity拖尾特效都会使用到它们。一些简单的介绍可以参见官方的API文档。 在这里探讨一下它们具体的渲染方式,而后给出一些Shader以...
  • AndrewFan
  • AndrewFan
  • 2017年02月25日 21:21
  • 5792

<Unity3D>Unity3D中LineRenderer的使用

LineRenderer线渲染器主要是用于在3D中渲染线段,虽然我们也可以使用GL图像库来渲染线段,但是使用LineRenderer我们可以对线段进行更多的操作,例如:设置颜色,宽度等。在这里要注意L...
  • zuoyamin
  • zuoyamin
  • 2013年05月31日 09:50
  • 20916
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity3d 实现用LineRenderer画线 不依赖摄像机位置
举报原因:
原因补充:

(最多只允许输入30个字)