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

ops/2025/3/10 16:59:09/

比如有这样一个情况,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.ppmy.cn/ops/164712.html

相关文章

Ruoyi+uniapp+websocket点对点和广播通知消息

前端参考文章:https://zhuanlan.zhihu.com/p/677296938 后端参考文章:ruoyi-vue websocket实现聊天功能_若依聊天系统-CSDN博客

碰一碰发视频系统之写卡功能开发了,支持OEM

一、引言 在碰一碰发视频系统中,NFC(Near Field Communication,近场通信)技术扮演着关键角色。其中,写卡功能是实现用户与系统便捷交互的重要环节,通过将特定的视频相关信息写入 NFC 标签,用户…

【SpringBoot】统一功能处理

目录 一、什么是统一功能处理 二、统一用户登录权限验证 2.1 定义拦截器 2.2 制定拦截规则 2.3 创建请求 2.4 拦截器实现原理 三、统一异常处理 四、统一数据格式返回 一、什么是统一功能处理 SpringBoot 统一功能处理: 定义:指在SpringBoot应…

供应链重构:制造业如何借助数字化提升响应速度?

下面这篇文章旨在从宏观和微观层面探讨:在过去五年(约2020-2024年)中,制造业如何通过数字化(尤其是人工智能、物联网、大数据等技术)重构供应链,以显著提升对市场与客户需求的响应速度。本文将包含相对详实的行业数据、部分技术原理解析、以及具有代表性的案例分析,帮助…

java项目springboot 项目启动不了解决方案

java项目springboot 项目启动不了解决方案 1. 清理 maven 重新打包 2. 从git 上拉去代码没有缓存,启动可以成功 3.Rebuild 项目 4. 失效缓存 Invalidate Caches

【如何删除在 Linux 系统中的删除乱码文件】

如何删除在 Linux 系统中的删除乱码文件 1. 列出文件并找到乱码文件:2. 使用通配符(谨慎使用):3. 转义特殊字符:4. 使用 find 命令:5. 使用 inode 号删除文件:6. 图形界面文件管理器&#xff1a…

Ubuntu 24.04安装搜狗出现闪烁,使用 Fcitx5 平替并添加自定义字典教程

Ubuntu 安装 Fcitx5 并添加字典教程 前言 书接上回,一时兴起将主力机的 Ubuntu 20.04 LTS 升级至了刚刚发布的 24.04 LTS。从 X 切换到 Wayland、GNOME 从 3.36 升级至 42、Python 默认为 3.10 等等……使用太新的软件包反而暂时带来了麻烦,部分原有的…

Spring Boot笔记(上)

01 概要 Spring Boot 是 Java 领域最流行的 快速开发框架,专为简化 Spring 应用的初始搭建和开发而设计。 一、Spring Boot 解决了什么问题? 传统 Spring 痛点 • 繁琐的 XML 配置 • 需要手动管理依赖版本 • 部署依赖外部 Web 服务器(如 …