当前位置: 首页 > 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

http://www.dtcms.com/a/59992.html

相关文章:

  • 【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++的内存管理
  • 单片机项目复刻需要的准备工作
  • SpringBoot参数校验:@Valid 与 @Validated 详解
  • nginx反向代理功能
  • LeetCode1871 跳跃游戏VII
  • 江协科技/江科大-51单片机入门教程——P[5-1] 模块化编程 P[5-2] LCD1602调试工具
  • 用Python写一个算24点的小程序
  • 在【k8s】中部署Jenkins的实践指南
  • CTFHub-FastCGI协议/Redis协议
  • 最新版本WebContext构造函数-避坑
  • 推理大模型的后训练增强技术-强化学习篇