应用场景:

屏幕上随机出现n对图片,使用鼠标点击图片进行匹配。鼠标点击第一个图片时,开始连线,起点为第一个图片的位置,终点为鼠标的位置。点击空白线条消失,第二次点击匹配失败线条消失,匹配成功线条消失。

//连线脚本
public class UIMatching : MonoBehaviour
{private Image line; //线条颜色材质。在这因挂载在了Image对象上,故取本身作为材质private Vector2 startPoint; //起点    线的起点坐标private Vector2 endPoint; //终点     线的终点坐标public float scaleSize;             //UI的适配机制,如果写得不对或者又跟好的方法,请指教//设置起点坐标public void SetStartPoint(Vector2 newPoint){startPoint = newPoint;}
//获取线条拉伸的方向(角度)public float GetAngle(){Vector2 dir = endPoint - startPoint;Vector2 dirV2 = new Vector2(dir.x, dir.y);float angle = Vector2.SignedAngle(dirV2, Vector2.down);return angle;}
//获得适配参数public void GetScaleSize(){if (Screen.width / 1024f > Screen.height / 768f){scaleSize = Screen.height / 768f;}else{scaleSize = Screen.width / 1024f;}}private void Start(){line = GetComponent<Image>(); //获得材质,故脚本挂载必须是含有Image组件的对象GetScaleSize();                          //初始化缩放}// Update is called once per framevoid Update(){endPoint = Input.mousePosition;            //设置线条终点一直为鼠标位置line.transform.Rotate(0, 0, GetAngle());     line.transform.localRotation = Quaternion.AngleAxis(-GetAngle(), Vector3.forward);float distance = Vector2.Distance(endPoint, startPoint);    line.rectTransform.sizeDelta = new Vector2(1, Mathf.Max(1*scaleSize, distance)); //distance -n    n代表实际线的起点距离startPoint值line.GetComponent<RectTransform>().anchoredPosition = Vector2.Lerp(startPoint, endPoint, 0.5f);}}`

在控制脚本中对上面的对象进行调用实例

public class Ctrl : BaseMonoBehaviour
{public GameObject selected;//第一个被选中的对象public UIMatching _matching;void Update(){if (EventSystem.current.IsPointerOverGameObject()){if (Input.GetMouseButtonDown(0)){PointerEventData eventDataCurrentPosition = new PointerEventData(EventSystem.current);eventDataCurrentPosition.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y);List<RaycastResult> results = new List<RaycastResult>();EventSystem.current.RaycastAll(eventDataCurrentPosition, results);bool isNullClick = true;  //是否点击了空(没有点到指定的目标,如点击空白取消连线的功能)//遍历鼠标点击时,处在射线下的所有UIforeach(RaycastResult r in results){if (r.gameObject.name == "指定对象名"){isNullClick = false;selected=r.gameObject;}}if (isNullClick){selected=null;}}}if (selected != null){_matching.SetStartPoint(Input.mousePosition);  //点击了空对象 所以线的起点和终点都为鼠标的位置}else{_matching.SetStartPoint(selected.transform.position);}}
}

对以上代码进行整理 ```csharp

//移动端if (Application.platform == RuntimePlatform.Android ||Application.platform == RuntimePlatform.IPhonePlayer){if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began){GameObject gb = GetPointerOverGameObject(Input.GetTouch(0).position, "查找的对象名");if (gb != null){//如果点击到的是目标ui所做的事情}else{//如果不是所要做的事情}gb = null;}}else{if (Input.GetMouseButtonDown(0)){GameObject gb = GetPointerOverGameObject(Input.mousePosition, "查找的对象名");if (gb != null){//如果点击到的是目标ui所做的事情}else{//如果不是所要做的事情}gb = null;}}
private GameObject GetPointerOverGameObject(Vector2 mousePosition,string name)
{//创建一个点击事件PointerEventData eventData = new PointerEventData(EventSystem.current);eventData.position = mousePosition;List<RaycastResult> raycastResults = new List<RaycastResult>();//向点击位置发射一条射线,检测是否点击UIEventSystem.current.RaycastAll(eventData, raycastResults);return  raycastResults.Find(x => x.gameObject.name == name).gameObject;
}

Unity 两个UI(坐标)之间的连线(直线)。如连线题相关推荐

  1. gps两点距离 php,PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法

    <PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法>要点: 本文介绍了PHP应用:PHP计算百度地图两个GPS坐标之间距离的方法,希望对您有用.如果有疑问,可以联系我们. 本文实 ...

  2. php 地图 距离,PHP计算百度地图两个GPS坐标之间距离的方法

    这篇文章主要介绍了PHP计算百度地图两个GPS坐标之间距离的方法,是针对百度地图接口开发的典型应用,需要的朋友可以参考下 本文实例讲述了PHP计算百度地图两个GPS坐标之间距离的方法.分享给大家供大家 ...

  3. Java:计算地球上两个经纬度坐标之间的距离-geodesy和geotools实现

    目录 方式一:自定义公式计算 方式二:geodesy计算距离 方式三:geotools计算距离 两个点的经纬度 latitude纬度 longitude经度 地点 22.678611 113.8056 ...

  4. python 笔记 haversine (两个经纬度坐标之间的距离)

    1 安装包 pip install haversine 2 haversine:计算两个点经纬度之间的距离 from haversine import haversine lyon = (45.759 ...

  5. Unity屏幕坐标转UI坐标

    var t = Vector2.zero; RectTransformUtility.ScreenPointToLocalPointInRectangle(mCanvas.transform as R ...

  6. oracle如何计算2个坐标的距离,百度地图两个坐标之间的距离计算

    /** * 计算两组经纬度坐标 之间的距离 * params :lat1 纬度1: lng1 经度1: lat2 纬度2: lng2 经度2: len_type (1:m or 2:km); * re ...

  7. 计算坐标点的距离计算机公式,计算两个GPS坐标点的距离

    原标题:计算两个GPS坐标点的距离 在日常开发中,我们难免要计算两个左边之间的距离,但是地图软件api的接口普遍要求我们必须要先将坐标点传递到他们服务器,然后计算出一个距离返还给我们,使用起来太不方便 ...

  8. java gps 距离计算_Java教程之地图中计算两个GPS坐标点的距离

    原标题:Java教程之地图中计算两个GPS坐标点的距离 在日常开发中,我们难免要计算两个左边之间的距离,但是地图软件api的接口普遍要求我们必须要先将坐标点传递到他们服务器,然后计算出一个距离返还给我 ...

  9. Unity将世界坐标转为UI坐标

    Unity将世界坐标转为UI坐标 话不多说,直接上代码: public void World2ToUI(Vector3 wpos, RectTransform uiTarget){//初始化一个屏幕坐 ...

  10. 计算两个经纬度坐标点之间的距离

    /*** 计算两个经纬度坐标点之间的距离* @param {Point} pointA 起点坐标点* @param {Point} pointB 终点坐标点* @return {Number} 计算后 ...

最新文章

  1. php中的函数调简单 传入参数即可,php函数与传递参数的简单示例
  2. 使用 icon 字体图标出现小方块问题
  3. 数据科学家们,请补齐你的短板,如何提升R语言编程能力
  4. 关于${ctx}拿不到值的问题
  5. 光流 | 高精度变分光流、LK-HS多项式展开的帧间估计、局部全局光流(论文翻译)及光流场与光流算法研究
  6. Linux系统openssl升级,在Linux系统上升级OpenSSL的方法
  7. linux下php支持mysql_linux下php扩展mysqli的支持 .
  8. java.lang.UnsupportedOperationException: null at java.util.AbstractList.add(AbstractList.java:148)
  9. 去除vue路由跳转地址栏后的哈希值#
  10. 刷机常识,双清,BL,REC,TWRP
  11. CCFCSP历年认证考试真题解答汇总(已解决20道,持续更新ing)
  12. eclipse 图形界面设计技巧——JLabel
  13. js获取时分秒数据格式为YYYMMDDHHmm方法
  14. 基金经理学量化(Python+AI)
  15. ZooKeeper管理工具一览
  16. iis6.0 index.php,IIS6.0下Wordpress 去掉 index.php 和 category 的方法小结
  17. MySQL数据库安全
  18. iTools安装软件
  19. html判断符号,html js 格式验证标点符号
  20. TCP/UDP 端口

热门文章

  1. serv-u+win2008R2+cutFtp配置
  2. wpa_supplicant使用
  3. Windows虚拟桌面
  4. 解决Windows无法加载中文(中国)-王码五笔输入法(任何输入法都行) 键盘的布局的方法...
  5. 时速云与炎黄盈动强强联手,打造企业 IT 变革新未来
  6. Telnet访问邮件服务器
  7. 软件测试体系学习及构建(20)测试专项丨易用性测试
  8. 身份证归属地查询接口
  9. Hybrid App基础知识
  10. 什么是YottaChain存储,为什么说是未来数据存储的趋势?