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

Unity 判断两个UI是否相交

今天碰到要判断两个UI是否相交的交互。

尝试了下,发现有两个方法都成功了。

1、使用Collider2D组件

分别创建两个Image组件,并且添加Collider2D组件,其中一个还要添加Rigidbody2D组件,如下图:

然后创建个判断脚本“UIintersect.cs",具体脚本代码如下,把脚本拉到场景中,当物体碰到一起是就能检测到它们是否相交了。

    public Image image1;public Image image2;private Collider2D collider1;private Collider2D collider2;// Start is called before the first frame updatevoid Start(){// 获取image1和image2的Collider组件collider1 = image1.GetComponent<Collider2D>();collider2 = image2.GetComponent<Collider2D>();}// Update is called once per framevoid Update(){// 检测两个Collider是否相交if (collider1.IsTouching(collider2)){Debug.Log("UI相交了!");}else{Debug.Log("UI没有相交!");}}

2、使用RectTransform组件和边界框。

本方法只需要脚本获取UI的RectTransform,然后判断它们的边界是否相交即可。

代码如下:

 public RectTransform uiElement1;public RectTransform uiElement2;// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){if (CheckCollision(uiElement1, uiElement2)){Debug.Log("UI相交了!");}else{Debug.Log("UI没有相交!");}}private bool CheckCollision(RectTransform rectTransform1, RectTransform rectTransform2){Rect rect1 = rectTransform1.rect;Rect rect2 = rectTransform2.rect;Rect worldRect1 = GetWorldRect(rectTransform1);Rect worldRect2 = GetWorldRect(rectTransform2);return worldRect1.Overlaps(worldRect2);}private Rect GetWorldRect(RectTransform rectTransform){Vector3[] corners = new Vector3[4];rectTransform.GetWorldCorners(corners);Vector3 bottomLeft = corners[0];Vector3 topRight = corners[2];return new Rect(bottomLeft.x, bottomLeft.y, topRight.x - bottomLeft.x, topRight.y - bottomLeft.y);}

把代码拉到场景中,也能判断UI是否相交。

总的感觉两种方法都不错。

效果:Unity判断两个UI是否相交_哔哩哔哩_bilibili

http://www.lryc.cn/news/222061.html

相关文章:

  • swoole process 消息通信
  • uniapp跳转方式
  • 六大排序算法:插入、选择、冒泡、快排、希尔、归并
  • 短信登录实现(黑马点评为例)
  • 【uniapp】签名组件,兼容vue2vue3
  • 初步利用Ansible实现批量服务器自动化管理
  • 网络安全和隐私保护技术
  • 保险行业采购管理痛点及解决方案(数智化采购系统)
  • 光学仿真 | 仿真推动以人类视觉感知为本的汽车显示设计
  • 判断两个对象是否不相等operator.ne()
  • 2023年云计算发展趋势:生活的智能未来
  • Spring Boot项目中通过 Jasypt 对属性文件中的账号密码进行加密
  • 2.3 矩阵消元
  • Docker 从构建开始导出一个镜像
  • 案例研究|腾讯音乐娱乐集团与JumpServer共探安全运维审计解决方案
  • 如何卸载在linux下通过rpm安装的mysql
  • docker复制镜像文件
  • 自动驾驶学习笔记(六)——Apollo安装
  • 四阶龙格库塔与元胞自动机
  • Mac安装opencvJava踩坑
  • YOLOv8-Pose推理详解及部署实现
  • django+drf+vue 简单系统搭建 (1) - django创建项目
  • 各种NoSQL数据库
  • 基于8086家具门安全控制系统设计
  • k8s:kubectl 详解
  • 壹基金防灾减灾宣传进社区 提升家庭安全能力
  • 抖音自动发评论软件下载方法与其使用方法与案例分析分享
  • Java代码实现当前时间增加3个月
  • 互联网系统安全(一)
  • C# TabControl实现为每一个TabPage添加关闭按钮