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...

Unity3d LineRenderer画线

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

unity使用line renderer画线

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

Unity3d LineRenderer画线

【狗刨学习网】 1、  画多条线 画多条线需要在场景中放置多个GameObject,因为一个GameObject只能添加一个LineRenderer Component。 2、  线...

<Unity3D>Unity3D中LineRenderer的使用

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

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

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

LineRenderer组建实现激光效果

在射击游戏中狙击一般都有一个红外线的效果。比如 鼠标指向哪个方向。就在哪个方向发射一条激光。这个用到了LineRenderer组建 我这里用射线检测。 创建一个圆柱体,添加Lin...
  • ybhjx
  • ybhjx
  • 2015年12月23日 10:32
  • 2305

<Unity3D>Unity3D中LineRenderer的使用

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

Unity3D中LineRenderer的使用

原文地址:Unity3D中LineRenderer的使用 LineRenderer线渲染器主要是用于在3D中渲染线段,虽然我们也可以使用GL图像库来渲染线段,但是使用LineRenderer我们可以对...

Unity 通过LineRenderer绘制两点之间的直线

private LineRenderer line; //画线 line = this.gameObject.AddComponent(); //只有设置了材质 setColor才有作用 line.m...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Unity3d 实现用LineRenderer画线 不依赖摄像机位置
举报原因:
原因补充:

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