这里实现两控件之间进行连线,线段使用图片完成,主要是涉及到坐标的转换和图片的缩放
同时也实现了手指和指定ui控件点之间的连线

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;public class DrawLine : MonoBehaviour {public Canvas canvas;public RectTransform fingerLine;//测试起点位置public RectTransform start;//手指或鼠标在屏幕上的点击位置private Vector3 touchPos;private bool isPress = false;private void Update(){//下面为测试连接鼠标位置if(Application.isMobilePlatform){for(int i = 0; i < Input.touchCount; ++i){UnityEngine.Touch touch = Input.GetTouch(i);if(touch.phase == TouchPhase.Began){isPress = true;touchPos = touch.position;}else{isPress = false;}}}else{if(Input.GetMouseButton(0)){isPress = true;touchPos =Input.mousePosition;}else{isPress = false;}}if (isPress){fingerLine.gameObject.SetActive(true);UpdateFingerLine(start.position);}else{fingerLine.gameObject.SetActive(false);}}//针对手指位置和对应UI控件之间的连线需要转换坐标处理private void UpdateFingerLine(Vector3 startPos){Vector3 uiStartPos = Vector3.zero;Vector3 uitouchPos = Vector3.zero;if(canvas.renderMode == RenderMode.ScreenSpaceOverlay){uiStartPos = startPos;uitouchPos = touchPos;}else if(canvas.renderMode == RenderMode.ScreenSpaceCamera){Camera camera = canvas.worldCamera;//UI世界的起点世界坐标转换为UGUI坐标Vector2 screenStartPos = RectTransformUtility.WorldToScreenPoint(camera, startPos);RectTransformUtility.ScreenPointToWorldPointInRectangle(canvas.GetComponent<RectTransform>(), screenStartPos,camera, out uiStartPos);//鼠标坐标转换为UGUI坐标RectTransformUtility.ScreenPointToWorldPointInRectangle(canvas.GetComponent<RectTransform>(), touchPos,camera, out uitouchPos);}fingerLine.pivot = new Vector2(0, 0.5f);fingerLine.position = startPos;fingerLine.eulerAngles = new Vector3(0, 0, GetAngle(uiStartPos, uitouchPos));fingerLine.sizeDelta = new Vector2(GetDistance(uiStartPos, uitouchPos), fingerLine.sizeDelta.y);}//通用设置线的,如果只设置两点之间连线,只需要初入对应的ui控件的Position//针对手指位置和对应UI控件之间的连线需要转换坐标处理private RectTransform SetLine(RectTransform lineSource, Vector3 startPos, Vector3 endPos){RectTransform line = Instantiate(lineSource, lineSource.parent);line.pivot = new Vector2(0, 0.5f);line.position = startPos;line.eulerAngles = new Vector3(0, 0, GetAngle(startPos, endPos));line.sizeDelta = new Vector2(GetDistance(startPos, endPos), lineSource.sizeDelta.y);return line;}private float GetAngle(Vector3 startPos, Vector3 endPos){Vector3 dir = endPos - startPos;float angle = Vector3.Angle(Vector3.right, dir);Vector3 cross = Vector3.Cross(Vector3.right, dir);float dirF = cross.z > 0 ? 1 : -1;angle = angle * dirF;return angle;}private float GetDistance(Vector3 startPos, Vector3 endPos){float distance = Vector3.Distance(endPos, startPos);return distance * 1 / canvas.transform.localScale.x;}
}

补充效果图

Unity UGUI中两点之间连线的通用实现相关推荐

  1. JavaScript - demo - 两点之间画线

    代码: <html><head></head><body><script>var f;window.onmousedown = functi ...

  2. arcgis两点之间连线_ArcGIS中实现一种流向地图的方法

    其实早在2011年,Esri的制图专家Mamata Akella就发表了一篇Blog,介绍在ArcGIS中实现一种流向地图的方法[1],来展示2011年Esri用户大会的参会者来源,如下图所示. 这里 ...

  3. arcgis两点之间连线_使用ArcGIS制作城市关系强度图(附数据下载)

    规划或地理等相关专业的同学可能会遇到城市关系强度图的制作.我们主要介绍制图部分,至于城市间关系强度如何计算,请左转自行查文献或相关资料学习. ArcMap中有个XY转线(XY to Line)的GP工 ...

  4. 无向图中两点之间的距离_自然语言处理中距离计算总结

    距离计算在自然语言处理中得到广泛使用,不同距离计算方式应用与不同的环境,其中也产生了很多不同的效果. 1 余弦距离 余弦夹角也可以叫余弦相似度.集合中夹角可以用来衡量两个向量方向的差异,机器学习中借用 ...

  5. [转]最速下降曲线:重力场中两点之间曲线更快

    数学之美:两点之间最快的路径 掉节操的星期一又来了,所以呢一起来观赏一下数学之骚美. 这事儿和17世纪的一道谜题有关,直到后来微积分被建立起来以后才得正解.虽然问题不难,但结果惊艳. 我先来问一个比较 ...

  6. 无向图中两点之间的距离_九上数学:二次函数图像,一动点到两定点距离和最小...

    题目: 这是九年级上册数学配套练习册<人教金学典>上的一道选择题,学生普遍反映较难. 析解: 本题求△PMF周长的最小值,而两个定点之距FM已为定值,故实质上是求PF+PM最小值.由于已知 ...

  7. Unity UGUI中的rebatch和rebuild理解

    unity将UI的渲染分为两个步骤,对mesh的操作称为Rebatch,对material和layout的操作称为Rebuild,而性能消耗也是在这两个部分. Rebatch的内部实现 Rebatch ...

  8. qt 在移动的两点之间连线_几种移动端跨平台技术区别

    H5+原生混合开发模式,WebView渲染(Cordova.Ionic.微信小程序.uniapp) 这类app称为混合应用或Hybrid App.(如果一个应用的大多数功能都是H5实现的话叫Web A ...

  9. BFS 寻找矩阵中两点之间的最短距离

    找指定两坐标间的最短距离 这一类 找两点间最短距离的问题一般是使用BFS来解决. 题目描述 给定一个矩阵,x 为坐标起点,即可以用作出发的地方,T 为终点, 即要到达的地方,那么请给出 从 X 出发能 ...

最新文章

  1. 【Qt】QtCreator中配置clang-format
  2. 【VMCloud云平台】SCCM(四)域内推送代理
  3. 【学习笔记】矩阵树定理(Matrix-Tree)
  4. Elasticsearch 常用配置参数总结
  5. 一个模型通杀8大视觉任务,一句话生成图像、视频、P图、视频处理...都能行 | MSRA北大出品...
  6. MacroMedia FreeHand 10中文版
  7. elasticsearch简单操作(一)
  8. 用servlet类返回WEB-INF中的页面
  9. mysql数据结构_mysql的底层数据结构
  10. javascript   漂亮随机码
  11. linux应用小技巧
  12. android ndk 编译选项,Android NDK 对于c++的支持(mk文件内编译选项)
  13. win10编译caffe跑faster-rcnn(cuda7.5)
  14. 《脱颖而出——成功网店经营之道》一2.5 后方——不可忽视的金库
  15. C# 判断是否是蜘蛛IP地址
  16. 解决atomikos在oracle应用中的XA事务异常 Error in recovery
  17. sql 只要一个字段相同则只显示一条数据_sql 有一个字段内容重复的 只显示一条的方法...
  18. 扫码点餐小程序有哪些优势
  19. 【基础】PNP三极管导通条件____很具代表性
  20. TCP协议:RST标志位

热门文章

  1. mysql参数化查询 in_mysql in 查询参数化
  2. 小姑娘说,我全靠水群,挤进了安全圈
  3. / ./ ../路径含义
  4. Java通过jacob生成动态word,还有一种方法通过word书签实现
  5. R语言学习(一)前言
  6. 车辆出险保险索赔技巧——让每个车友都能学习
  7. 电脑桌面的word文件丢失了怎么找回?7个解决方法!
  8. 适配7.0手机拍照、相册、裁剪图片
  9. 荣耀笔试(8.16)
  10. 华为od统一考试B卷【分积木】C++ 实现