当前位置: 首页 > news >正文

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();}}}

创作不易,如果本篇文章让你有所收获,不妨点赞支持一下,谢谢!

http://www.cnnetsun.cn/news/1515737.html

相关文章:

  • COMSOL相场法(/水平集方法)多孔介质驱替模型案例,可以提供随机孔隙度几何程序
  • PCDViewer的常用操作
  • Rainmeter皮肤文本装饰线条粗细:自定义线条宽度终极指南
  • 深入海思Hi3536双系统架构:NAND扩容后如何重新规划主从系统分区与内存布局
  • 如何快速打造微信风格视频编辑功能?推荐开源神器WeiXinRecordedDemo
  • 5步完成团队知识库迁移:Outline让文档协作更高效
  • OCAuxiliaryTools:重新定义OpenCore配置的全流程管理方案
  • (BSLO,SAO,APO优化VMD分解)吸血水蛭优化算法Blood-sucking leec...
  • Windows右键菜单管理效率优化指南:从混乱到有序的系统化解决方案
  • SketchUp STL插件完全指南:从3D模型到3D打印的无缝转换
  • STK传感器建模避坑指南:从Detector Pitch到GSD分辨率的完整参数换算(含Elevation 90°特殊案例)
  • 如何调用Amazon商品详情API获取产品信息
  • 零基础玩转OpenClaw:nanobot镜像可视化操作指南
  • ABAP日期处理实战:如何快速获取上个月最后一天(含闰年判断)
  • EDK II性能测试报告模板:标准化测试报告格式完全指南
  • Unity URDF Importer深度解析:机器人仿真从ROS到Unity的实战指南
  • OpenClaw技能扩展:用百川2-13B实现公众号自动发布
  • 实测2公里矿用电缆跑网络:用电力载波模块替代光纤,在井下到底靠不靠谱?
  • Project-Quantum模块化电源管理:Gluon-Power电源模块的终极使用手册
  • GitHub Desktop 中文本地化工具:让 Git 操作更简单的全流程指南
  • Qwen3-32B指令优化手册:让OpenClaw准确理解“整理我的下载文件夹”
  • LangChainJS快速入门:5分钟搭建你的第一个AI聊天机器人
  • Docker实战:5分钟搞定Chromedriver+Chrome跨系统部署(附避坑指南)
  • 02 | Claude Code 工程化实战:过目不忘——记忆系统与 CLAUDE.md
  • 5分钟极速部署!Billion Mail容器化方案助力邮件营销升级 [特殊字符]
  • SAP财务替代实战:OBBH与BTE配置避坑指南(含OB28校验)
  • EDK II开发培训认证考试资源:官方考试资源
  • 四步精通uesave:Unreal引擎存档编辑从入门到实践
  • 如何在元宇宙教育平台中利用JPEXS Free Flash Decompiler开发SWF内容课程:完整指南
  • 高校AI破局:浪潮信息助建元脑企智EPAI平台,实现科研与普惠双驱动!