unity LineRender结合多点触摸 实现拖拽 重复画线
Unity LineRender
之前我也关于linrender划线写过一篇博客 这个是最近项目中使用到的功能就研究了下 当然也欢迎大佬帮忙优化代码
闲话不多说 先上划线的代码
//画线的端点public GameObject[] AllPosition;//移动的点public Transform MoveCube;//移动的坐标public Vector3[] VecValue;int num = 0;//LineRendererprivate LineRenderer lineRenderer;void Start(){//画线//添加LineRenderer组件lineRenderer = gameObject.GetComponent<LineRenderer>();//设置颜色lineRenderer.startColor = new Color32(198, 171, 118, 255);lineRenderer.endColor = new Color32(198, 171, 118, 255);//设置宽度//lineRenderer.SetWidth(0.02f, 0.02f);lineRenderer.startWidth = 0.03f;lineRenderer.endWidth = 0.03f;}VecValue = new Vector3[AllPosition.Length];for (int i = 0; i < AllPosition.Length; i++){VecValue[i] = AllPosition[i].transform.localPosition;}
相比较之前的划线 多了一个需要移动的点跟目标点位 划线方法 跟随移动的Transform来不断移动坐标 目标坐标就是设置的数组点 当然这个方法还需要在update中调用 并且 如果前面的节点不显示 后面的节点也不画线 由于是触摸屏 所以要根据节点是否显示 控制划线 所以要有结点显示与否的判定
//检测数组中是否包含某些数据public bool DetectionData(int num){if (num == 0){return true;}//如果包含for (int i = 0; i < num + 1; i++){if (!Number.Contains(i)){return false;}}return true;}public List<int> Number = new List<int>();public void LineMove(){for (int i = 0; i < AllPosition.Length; i++){if (AllPosition[i].activeSelf){if (!Number.Contains(i)){Number.Add(i);Maxnums = i;NumberValueSet();}}else{if (Number.Count > i){Number.RemoveAt(i);Maxnums = i - 1;}}}}
根据这样的方法去判断 前面的结点是否显示 如果显示 在开始划线 划线结束 将所有划线的点坐标跟随物体的点坐标 这样移动的时候线条也跟着移动
public int Maxnums = 0;bool IsValue = true;bool IsLine = false;void Update(){LineMove();if (DetectionData(Maxnums) && Maxnums > 0){AllActive(Maxnums + 1);}}//画线方法public void AllActive(int MaxNum){if (IsValue){VecValue = new Vector3[MaxNum];for (int i = 0; i < MaxNum; i++){VecValue[i] = AllPosition[i].transform.position;}MoveCube.position = VecValue[0];IsValue = false;IsLine = true;}if (IsLine){//画线lineRenderer.positionCount = MaxNum;MoveCube.position = Vector3.MoveTowards(MoveCube.position, VecValue[num], 5f * Time.deltaTime);for (int i = num; i < MaxNum; i++){lineRenderer.SetPosition(i, MoveCube.position);}lineRenderer.SetPosition(num, MoveCube.position);if (MoveCube.position == VecValue[num]){num++;if (num > MaxNum - 1){num = MaxNum - 1;IsLine = false;}}}if (!IsLine){if (lineRenderer.positionCount != MaxNum){lineRenderer.positionCount = MaxNum;}for (int i = 0; i < MaxNum; i++){lineRenderer.SetPosition(i, AllPosition[i].transform.position);}}}
在update 中调用方法 并且判断结点 显示在开始划线
当然还有另外一种方法 就是将判断结点是否显示 放在单个结点上检测 用一个控制器 控制这些划线动画 当然也更合理一些 不需要重新开始绘制线条
实现的效果
unity LineRender结合多点触摸 实现拖拽 重复画线相关推荐
- C++语言Qt实现控件拖拽和连线类似可视化操作Simulink仿真类软件 电路仿真软件 和模型驱动等软件
目标:开发一个电路仿真软件. 内部原理:qt编写电路元件连接的可视化界面,输出电路节点连接关系为一张表.matlab编写电路仿真算法,读取节点连接表,进行运算,得出仿真结果,qt读取仿真结果并且在界面 ...
- 转大佬--C++语言Qt实现控件拖拽和连线类似可视化操作Simulink仿真类软件 电路仿真软件 和模型驱动等软件
转自–标biao的文章:https://blog.csdn.net/kangkanglhb88008/article/details/120812524 目标:开发一个电路仿真软件. 内部原理:qt编 ...
- uni map地图相关使用小计(多点标识,拖拽起点,地图画圆)
这次的项目用到了地图,特别记录下 小程序不执行地图相关事件时候,看下小程序的调试基础库 进行多点标注时候,经纬度要正确,图标设置50就好了,ID是一定得绑定的. 动态传参时候如果需要保留之前的标注点就 ...
- macbook触摸板拖拽不好用?复制选中难?教你两个设置,从此告别鼠标
触控板设置 点击设置–触控板–更多手势,像下面这样设置 辅助功能设置 点击设置–辅助功能–左边下拉找到指针控制–触控板选项 启用三指拖拽 以后选中与拖拽只需要三指操作,再也不需要点按了,从此告别鼠标, ...
- vue 拖拽产生连线_dragUI
dragUI 文档目录 用于UNI可拖拽可视化编程 在线演示 demo地址 一个简单创建hello world 界面的视频,github不会放视频,放在bilibli了 dragUI 演示视频 效果图 ...
- Unity实现UI的边缘检测和拖拽拉伸功能
文章目录
- d3力导向图增加节点_D3.js+Es6+webpack构建人物关系图(力导向图),动态更新数据,点击增加节点,拖拽增加连线......
Java学习手记2--多线程 一.线程的概念 CPU执行程序,就好比一个人在干事情一样,同一个时间你只能做一件事情,但是这样的效率实在是太低了,在你用电脑的时候,听歌就不能浏览网页,看电影就不能下载视 ...
- UGUI背包实现详解之一UGUI精准拖拽
UGUI为开发者提供了许多实现交互的接口,包括拖拽类.点选类.鼠标指针类等,下面是最简单的UI拖拽实现方式: 将上边代码挂在UI上运行,就可以实现最简单的拖拽效果.但是这种方式存在问题:鼠标开始点下时 ...
- canvas 中的元素拖拽
实验室要求实现在canvas的元素的拖拽,即在canvas放置一些图标,实现用户拖拽并连线. 需要的知识(1)canvas drawImage方法 function draw(){ var image ...
- Axure 10 案例:模拟鼠标拖拽画框线的效果
介绍 鼠标拖拽画框线是我们常用的操作.可以通过Axure来完美的模拟鼠标拖拽画框线的效果,当接触到了其他控件的时候,可以通过交互来表示接触状态. 今天,就让我们来学习如何制作它. 预览效果 预览原型 ...
最新文章
- Java解决百马百担问题
- 20170608-BOM
- Python是否具有字符串“包含”子字符串方法?
- 数据结构 - 有两个链表,第一个升序,第二个降序,合并为一个升序链表(C++)
- Linux用户、群组管理
- [HNOI2015]亚瑟王
- 在Eclipse中运行hadoop程序
- AJAX实践DWR篇(转载)
- 图像分类_03分类器及损失:线性分类+ SVM损失+Softmax 分类+交叉熵损失
- CanFestival字典生成
- Window中的Docker 拉取Mysql镜像 并在本地Navicate链接
- C++学习笔记(一)——类和对象
- 怎样高效地管理自己阅读过的文献资料?
- UE4 相对坐标转世界坐标
- 【Keras】Keras中fit_generator的使用,及fit、fit_generator、和train_on_batch的区别
- 外观html与外观css的区别,用房间和装修来解读html代码与css样式的区别和关系
- 抓包工具有哪些你知道吗?今天给你们介绍四款最受欢迎的抓包神器
- dell r510服务器怎么装系统,DELLR510服务器上安系统
- 第三周java实验报告
- 怎样用计算机给ipd传电影,怎样不使用iTunes将电影导入iPad?