Unity之GL画线
一、GL画牵引线
注意:若想GL画出来的线显示在UI(UGUI)上面,将UI的画布Canvas的Render Mode设置为为Screen Space - Camera,下面的Render Camera使用主相机,并且保证Sorting Layer 为 Default、 Order in Sorting 值为 0
二、效果图如下:
注意:图中绿色牵引线为GL画线,两头圆圈为UI
三、代码如下
注意:里面有其他与画线无关的代码,可直接忽略
/******************************************************************************* * 版权声明:,保留所有版权 * 版本声明:v1.0.0 * 类 名 称: DrawLine * 创建日期:2019-07-30 09:16:51 * 作者名称:静哥哥 * CLR 版本:4.0.30319.42000 * 修改记录: * 描述:画牵引线 ******************************************************************************/usingUnityEngine;usingSystem.Collections;usingUnityEngine.UI;usingSystem;namespaceCom.Rainier.WangJing{publicclassDrawLine:MonoBehaviour{publicMaterialmat;publicGameObjecttarget;publicstringtargetName;publicVector3[]pos=newVector3[3];privateRectTransformmTip;privateTextmText;publicColormycolor=Color.green;publicboolisShow=true;publicShadershader;publicButtonmButton;privatevoidStart(){target=gameObject.transform.parent.GetChild(2).gameObject;targetName=this.gameObject.name;mButton=gameObject.GetComponent<Button>();mat=newMaterial(shader);Init();}privatevoidInit(){mTip=this.transform.GetComponent<RectTransform>();mText=mTip.transform.GetComponentInChildren<Text>();// mButton = mTip.transform.GetComponentInChildren<Button>();Refresh();mButton.onClick.AddListener(ButtonClickToSwitch);}privatevoidButtonClickToSwitch(){isShow=!isShow;if(isShow){target.SendMessage("Showing",SendMessageOptions.DontRequireReceiver);}else{target.SendMessage("Closing",SendMessageOptions.DontRequireReceiver);}}privatevoidUpdate(){Refresh();}publicvoidRefresh(){//初始物体起点//pos[0] = Camera.main.WorldToScreenPoint(target.transform.position);pos[0]=target.transform.position;//判断目标在标签左右哪侧intside=1;if(pos[0].x>mTip.position.x){side=-1;}//折转点pos[1]=pos[0]+newVector3(50F,0F,0F)*side;//终点为TEXTpos[2]=mTip.position;mText.text=targetName;////初始物体起点//pos[0] = Camera.main.WorldToScreenPoint(target.transform.position);//Vector3 m_Screen = RectTransformUtility.WorldToScreenPoint(Camera.main, mTip.position);////判断目标在标签左右哪侧//int side = 1;//if (pos[0].x > m_Screen.x)//{// side = -1;//}////折转点//pos[1] = pos[0] + new Vector3(50F, 0F, 0F) * side;////终点为TEXT//pos[2] = m_Screen;////mText.text = targetName;}privatevoidOnRenderObject(){if(!isShow)return;GL.PushMatrix();mat.SetPass(0);GL.LoadOrtho();GL.Begin(GL.LINES);GL.Color(newColor(142F/255F,188F/255F,50F/255F));//遍历所有点for(inti=0;i<pos.Length-1;i++){//GL.glLineWidth(5);GL.Vertex3(pos[i].x/Screen.width,pos[i].y/Screen.height,0);GL.Vertex3(pos[i+1].x/Screen.width,pos[i+1].y/Screen.height,0);}GL.End();GL.PopMatrix();}}}创作不易,如果本篇文章让你有所收获,不妨点赞支持一下,谢谢!
