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

Unity UGUI下实现精确点击的一种方式

比如有这样一个情况,UI的显示区域是个圆形,在点击的时候也需要精确点击到这个圆形显示区域,但是UI元素的RectTransform是个矩形
在这里插入图片描述

1. 使用脚本修改

在这里插入图片描述

2. 原理探究

此脚本继承了Image组件,但是获取了自身的Collider2D,目的是为了通过Collider2D检测点击操作时的射线检测是否在Collider2D的范围内,从而达到精确点击的效果,重写IsRaycastLocationValid方法
在这里插入图片描述
原先的方法会判断透明度,再判断是否在RectTransform范围内。
这里最终是使用Collider2D的OverlapPoint方法,但传入的需要是世界空间中的点。所以涉及到一个坐标转换的问题。
在这里插入图片描述
当Canvas是Overlay的模式,此时不存在eventCamera,那就先通过RectTransformUtility.ScreenPointToLocalPointInRectangle方法将屏幕坐标转换到UI元素的本地坐标,再通过rectTransform.TransformPoint方法转换到世界坐标。
当Canvas是Camera/WorldSpace模式时,注意,此时Camera需要是正交的才可以直接使用ScreenToWorldPoint方法,如果相机是透视的,需要设置传入的screenPoint的Z不为0,将被设置为想要得到的坐标Z - 相机的坐标Z


http://www.kler.cn/a/579204.html

相关文章:

  • 自然语言处理:高斯混合模型
  • 配置nacos
  • Maven 中 SNAPSHOT 版本与 RELEASE 版本的区别
  • 爬虫案例十一js逆向数位观察网
  • ALG(Alloy+Loki+Grafana)轻量级日志系统
  • deepseek为什么要开源
  • OINH系列(自编)---> <Page 2-[1]>题库原题(少)
  • 机器人匹诺曹机制,真话假话平衡机制
  • 蓝桥杯备考:图论初解
  • 2025年渗透测试面试题总结-小某鹏汽车-安全工程师(题目+回答)
  • K8S单机部署
  • 【HarmonyOS Next】鸿蒙加固方案调研和分析
  • INFINI Labs 产品更新 | Easysearch 增加异步搜索等新特性
  • 在Ubuntu上搭建Samba服务,实现与windows之间的文件共享
  • 软件测试の概念之测试分类质量模型测试用例
  • 【哇! C++】类和对象(五) - 赋值运算符重载
  • 文生图 图生视频 文生视频人工智能AI工具节选
  • 【django初学者项目】
  • 算法每日一练 (9)
  • Flutter 学习之旅 之 flutter 不使用插件,简单实现一个 Toast 功能