unity GL画线

对某篇文章加以改动。

把这个脚本挂到相机下,才干显示。


using UnityEngine;  

using System.Collections;  

public class joint{  
public Vector3 org;  
public Vector3 end;  
}  
public class Drawline : MonoBehaviour {  


private Vector3 orgPos;    
private Vector3 endPos;    
private bool canDrawLines  = false;    
ArrayList posAL;  
ArrayList temppos;  
public Material lineMaterial;  

void Start()  
{  
temppos=new ArrayList();  
posAL=new  ArrayList();  
}  


void Update()  
{  
if (Input.GetMouseButtonDown(0) || (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Began))
{
Vector3 inputPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
RaycastHit2D lastHit = Physics2D.Raycast(inputPos, new Vector2(0, 0), 0.1f, LayerMask.GetMask("Drawline"));

if (lastHit.collider != null)
{
orgPos=Input.mousePosition;    
endPos=Input.mousePosition;
}
}
else if (Input.GetMouseButton(0) || (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Moved))
{
Vector3 inputPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
RaycastHit2D lastHit = Physics2D.Raycast(inputPos, new Vector2(0, 0), 0.1f, LayerMask.GetMask("Drawline"));

if (lastHit.collider != null)
{
canDrawLines = true;
endPos=Input.mousePosition;
temppos.Add(Input.mousePosition);  
GLDrawLine(orgPos,endPos);    
orgPos=Input.mousePosition;
}
}
else if(Input.GetMouseButtonUp(0) || (Input.touchCount > 0 && Input.touches[0].phase == TouchPhase.Ended))
{
Vector3 inputPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
RaycastHit2D lastHit = Physics2D.Raycast(inputPos, new Vector2(0, 0), 0.1f, LayerMask.GetMask("Drawline"));

if (lastHit.collider != null)
{
endPos=Input.mousePosition;
}
}
}


void GLDrawLine(Vector3 beg ,Vector3 end )    
{  
if(!canDrawLines)    
return;    
GL.PushMatrix ();    
GL.LoadOrtho ();    

beg.x=beg.x/Screen.width;    
end.x=end.x/Screen.width;    
beg.y=beg.y/Screen.height;    
end.y=end.y/Screen.height;    
joint tmpJoint = new joint();    
tmpJoint.org=beg;    
tmpJoint.end=end;    

posAL.Add(tmpJoint);    
lineMaterial.SetPass( 0 );  
GL.Begin( GL.LINES );    
GL.Color( new Color(1,1,1,0.5f) );    


for(int i= 0;i<posAL.Count;i++)    
{    
joint tj  =(joint)posAL[i];    
Vector3 tmpBeg  = tj.org;    
Vector3 tmpEnd=tj.end;    
GL.Vertex3( tmpBeg.x,tmpBeg.y,tmpBeg.z );    
GL.Vertex3( tmpEnd.x,tmpEnd.y,tmpEnd.z );
}    
GL.End();    
GL.PopMatrix ();    
}    
 
public void ClearLines()    
{    
canDrawLines = false;
if(posAL != null)
posAL.Clear();    
}  

void OnPostRender() {    
GLDrawLine(orgPos,endPos);    
}     
}  
posted @ 2017-07-09 21:10  jzdwajue  阅读(236)  评论(0编辑  收藏  举报