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

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

相关文章:

  • 【GIT】non-fast-forward错误
  • python面试常见题目
  • 【RAG】基于向量检索的 RAG (BGE示例)
  • Leetcode 刷题记录 05 —— 普通数组
  • 硬件学习笔记--48 磁保持继电器相关基础知识介绍
  • 【每日学点HarmonyOS Next知识】 状态变量、公共Page、可见区域变化回调、接收参数、拖拽排序控件
  • 前端数据模拟 Mock.js 学习笔记(附带详细)
  • 中小学信息学特长生试卷(C++)
  • 6.聊天室环境安装 - Ubuntu22.04 - elasticsearch(es)的安装和使用
  • clickhouse执行进度
  • How to install nacos 2.5 with podman
  • 汇编的伪指令
  • Vue3 模板引用:打破数据驱动的次元壁(附高阶玩法)
  • openwrt路由系统------lua、uci的关系
  • SAP HANA Merge
  • 【C++设计模式】第十六篇:迭代器模式(Iterator)
  • mysql进阶(五)
  • Windows控制台函数:控制台读取输入函数ReadConsoleA()
  • STM32中输入/输出有无默认电平
  • C++的内存管理
  • 微软将在全球裁员6000人,目标之一为减少管理层
  • 北斗专访|特赞科技范凌:现在AI主要是“说话”,接下来要“干活”了
  • 美国明尼苏达州发生山火,过火面积超80平方公里
  • 刘永明|在从普及到提高中发展新大众文艺
  • 时隔近4年再出征!长三丙成功发射通信技术试验卫星十九号
  • 北京“准80后”干部兰天跨省份调任新疆生态环境厅副厅长