Unity3D判断屏幕中某个坐标点的位置是否在指定UI区域内

系列文章目录

unity工具


文章目录

  • 系列文章目录
  • 前言
  • 一、使用rect.Contains()判断
    • 1-1、转换坐标
    • 1-2、代码如下:
    • 1-3、注意事项
    • 1-3、测试效果如下
  • 二、使用坐标计算在不在区域内
    • 2-1、方法如下:
    • 2-2、注意事项
  • 三、使用RectTransformUtility.ScreenPointToLocalPointInRectangle和坐标一起配合计算
    • 3-1、代码如下:
    • 3-2、注意事项
  • 总结


前言

大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。
有时候需要判断玩家此时点击的某个点是否在某个指定的UI区域内,如果在区域内则响应点击事件,不在区域内时不进行响应事件。所以记录一下

一、使用rect.Contains()判断

1-1、转换坐标

把屏幕坐标转换成本地坐标
API:RectTransformUtility.ScreenPointToLocalPointInRectangle
然后在使用**Contains()**判断某个坐标点在不在该RectTransform里面了

1-2、代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UIClickPosition : MonoBehaviour
{//判断的UI区域public RectTransform rectTrans;//用于坐标点是否在区域内的标记public Text txtFlag;private void Update(){GetClickArea(Input.mousePosition);}///传入某个坐标点进行判断public void GetClickArea(Vector2 point){Vector2 localPoint;//将屏幕坐标转化为相对rectTrans的本地坐标if (RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTrans, point, Camera.main, out localPoint)){//rectTrans.rect是rectTrans的本地坐标,不能rectTrans.rect.Contains(point)直接判断,必须先转为本地坐标localPoint//判断点击的坐标点是否在rectTrans.rect矩形内if (rectTrans.rect.Contains(localPoint)){txtFlag.color = Color.green;txtFlag.text = "鼠标在UI区域内哦";}else{txtFlag.color = Color.red;txtFlag.text = "鼠标不在UI区域内哦";}}}
}

1-3、注意事项

1.需要将Canvas设置成相机模式 ScreenSpace-Camera ,要不然没有反应
2.在这里插入图片描述

1-3、测试效果如下

Unity判断屏幕中某个坐标点的位置是否在指定UI区域内

二、使用坐标计算在不在区域内

2-1、方法如下:

/// <summary>/// 使用坐标计算位置/// </summary>/// <param name="pos"></param>public void GetClickArea_pos(Vector3 pos){float _mapWidth = rectTrans.sizeDelta.x;float _mapHight = rectTrans.sizeDelta.y;//目标区域锚点为居中时使用 Pivot(0.5,0.5)if (pos.x < (rectTrans.position.x + _mapWidth / 2) && pos.x > (rectTrans.position.x - _mapWidth / 2) &&pos.y < (rectTrans.position.y + _mapHight / 2) && pos.y > (rectTrans.position.y - _mapHight / 2)){txtFlag.color = Color.green;txtFlag.text = "鼠标在UI区域内哦";}else{txtFlag.color = Color.red;txtFlag.text = "鼠标不在UI区域内哦";}}

2-2、注意事项

1.根据坐标计算位置不需要设置Canvas的渲染模式,反之设置成第二种模式,到不行了,不能使用了
2.但是目标图片中心点需要设置成居中
如下图
在这里插入图片描述

三、使用RectTransformUtility.ScreenPointToLocalPointInRectangle和坐标一起配合计算

1.把第一种第二种相结合,无需考虑中心点,锚点,

3-1、代码如下:

 /// <summary>/// 第三种方法:使用RectTransformUtility配合坐标计算,无需考虑中心点,锚点/// </summary>/// <param name="pos"></param>public void GetClickArea_(Vector3 pos){Vector2 localPoint;//将选中的点转换为Image区域内的本地点RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTrans, pos, Camera.main, out localPoint);Vector2 pivot = rectTrans.pivot;Vector2 normalizedLocal = new Vector2(pivot.x + localPoint.x / rectTrans.sizeDelta.x, pivot.y + localPoint.y / rectTrans.sizeDelta.y);if ((normalizedLocal.x >= 0 && normalizedLocal.x <= 1) && ((normalizedLocal.y >= 0 && normalizedLocal.y <= 1))){txtFlag.color = Color.green;txtFlag.text = "鼠标在UI区域内哦";}else{txtFlag.color = Color.red;txtFlag.text = "鼠标不在UI区域内哦";}}

3-2、注意事项

1.第三种也是需要把相机模式改成和第一种里面使用的模式一样(ScreenSpace-Camera)

总结

不定时更新Unity开发技巧,觉得有用记得一键三连哦。

以上就是今天要讲的内容,有需要会继续补充

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/669752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024-02-05 Linux shell 脚本检查检测某个环境变量是否已设置

一、这段脚本定义了一个函数check_config&#xff0c;用于检查传递给函数的环境变量或shell变量是否已设置&#xff08;即非空&#xff09;。如果所有变量都已设置&#xff0c;函数返回0&#xff08;成功&#xff09;&#xff1b;否则&#xff0c;它打印一条信息&#xff0c;指…

MongoDB从入门到实战之Docker快速安装MongoDB

前言 在上一篇文章中带领带同学们快速入门MongoDB这个文档型的NoSQL数据库&#xff0c;让大家快速的了解了MongoDB的基本概念。这一章开始我们就开始实战篇教程&#xff0c;为了快速把MongoDB使用起来我将会把MongoDB在Docker容器中安装起来作为开发环境使用。然后我这边MongoD…

SQL Server数据库日志查看若已满需要清理的三种解决方案

首先查看获取实例中每个数据库日志文件大小及使用情况&#xff0c;根据数据库日志占用百分比来清理 DBCC SQLPERF(LOGSPACE) 第一种解决方案&#xff1a; 在数据库上点击右键 → 选择 属性 → 选择 文件&#xff0c;然后增加数据库日志文件的文件大小。 第二种解决方案 手动…

宝塔+php+ssh+vscode+虚拟机 远程调试

远程(虚拟机)宝塔 安装扩展 配置文件添加&#xff0c;zend_extension看你虚拟机的具体位置 [Xdebug] zend_extension/www/server/php/74/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so xdebug.modedebug xdebug.start_with_requesttrigger xdebug.client_host&quo…

gunicorn日志--access-logformat不起作用

使用gunicornsupervisor启动fastapi服务&#xff0c;命令如下&#xff1a; gunicorn main:app --workers 2 --worker-class uvicorn.workers.UvicornWorker --bind 127.0.0.1:8000 --access-logfile - 其中access log记录到的内容如下&#xff1a; 176.123.7.11:0 - "GE…

服务器与电脑的区别

1. PC机和专业服务器是完全是两种东西&#xff0c;硬件不同&#xff0c;当然驱动也不可能相同。比如说对服务器/工作站主板而言&#xff0c;最重要的 是高可靠性和稳定性&#xff0c;其次才是高性能。因为大多数的服务器都要满足每天24小时、每周7天的满负荷工作要求。价格方面…

C/C++ - 容器list

目录 容器特性 list 容器特性 使用场景 构造函数 默认构造函数 填充构造函数 范围构造函数 复制构造函数 大小函数 函数&#xff1a;size 函数&#xff1a;empty​ 函数&#xff1a;max_size​ 增加函数 函数&#xff1a;​push_back​ 函数&#xff1a;push_f…

车位检测,YOLOV8,OPENCV调用

车位检测YOLOV8NANO,opencv调用 车位检测&#xff0c;YOLOV8NANO&#xff0c;训练得到PT模型&#xff0c;然后转换成ONNX&#xff0c;OPENCV的DNN调用&#xff0c;支持C,PYTHON,ANDROID

行业知识图谱是什么

行业知识图谱是一种将行业知识从业务场景抽象到计算机可读的知识结构。它是指在行业内业务领域中&#xff0c;对各种业务实体、概念、属性以及关系的一种结构化描述。是一种通过知识表示、推理和查询的手段&#xff0c;将行业知识以图形化方式表示出来。它可以被用来建立企业的…

C#用Array类的FindAll方法和List<T>类的Add方法按关键词在数组中检索元素并输出

目录 一、使用的方法 1. Array.FindAll(T[], Predicate) 方法 &#xff08;1&#xff09;定义 &#xff08;2&#xff09;示例 2.List类的常用方法 &#xff08;1&#xff09;List.Add(T) 方法 &#xff08;2&#xff09;List.RemoveAt(Int32) 方法 &#xff08;3&…

Bytebase 签约 Vianova,助力欧洲城市交通智能平台中 Snowflake 和 PG 的变更自动化及版本控制

在数字化发展的浪潮中&#xff0c;自动化数据库变更管理成为提升产品上线效率、降低人为失误风险的关键工具&#xff0c;同时促进流程的一致性与标准化&#xff0c;确保合规性和变更的可追溯性。近日&#xff0c;数据库 DevOps 团队协同管理工具 Bytebase 签约欧洲交通数据管理…

免费在线绘图工具有哪些好用的?线画图工具是比较好的选择?

据说一张图胜过千言万语。一张好的图片可以帮助你快速表达自己的想法&#xff0c;让自己的想法更直观清晰&#xff0c;无论是产品分析、方案选项还是技术交流。市面上有很多绘图工具。这里有一些好用又免费的工具&#xff0c;绝对会让你在几分钟内坠入爱河。 即时设计 - 可实时…

Android~集成opencv问题

dlopen failed: library “libopencv_java4.so” not found E FATAL EXCEPTION: mainProcess: com.cv.monitor, PID: 4371java.lang.UnsatisfiedLinkError: dlopen failed: library "libopencv_java4.so" not found: needed by /data/app/~~KwL8rjD8_by_YVAyU82UCA…

YUM | 起源 | 发展 | 运行逻辑

介绍 YUM&#xff08;Yellowdog Updater, Modified&#xff09;起源于 Red Hat Linux 发行版 up2date 工具。 最初&#xff0c;up2date 是由 Red Hat 公司提供的用于管理系统更新的工具。然而&#xff0c;社区逐渐对 up2date 出现一些不满&#xff0c;主要是由于其使用体验和…

ubuntu20安装mysql8

1.安装 sudo apt update sudo apt install mysql-server-8.0 -y2.查看运行状态 yantaoubuntu20:~$ sudo systemctl status mysql ● mysql.service - MySQL Community ServerLoaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset:>Active: active …

10英寸安卓车载平板电脑丨ONERugged车载工业平板:解决农业工作效率

农业是人类社会的基石之一&#xff0c;而农业工作效率的提升一直是农民和农业专业人士关注的重要议题。随着技术的不断进步&#xff0c;车载工业平板成为了解决农业工作效率的创新解决方案。本文将探讨车载工业平板如何为农业带来巨大的改变&#xff0c;提高农民的工作效率和农…

常用数字处理格式校验

1、前端校验 1.1 要求为数字类型&#xff08;不限位数与正负&#xff09; input输入框添加 type“number” <el-input type"number"/>当typenumber时&#xff0c;仍然可以输入字母e或E。解决方法是&#xff1a;给typenumber的输入框添加一个正则表达式&…

Android Studio 安装Flutter插件但是没法创建项目

Android Studio 安装Flutter插件但是没法创建项目 如果你在Android Studio已经安装了Dart、Flutter插件&#xff0c;但是不能创建Flutter项目。 原因是因为Android Studio的版本更新&#xff0c;Android APK Support这个插件没被选中。 一旦勾选这个插件之后&#xff0c;就能…

python创建pdf文件

目录 一&#xff1a;使用reportlab库 二&#xff1a;使用使pdf库 在Python中生成PDF文件可以使用多种库&#xff0c;其中最常用的是reportlab和fpdf。以下是使用这两个库生成PDF文件的示例代码&#xff1a; 一&#xff1a;使用reportlab库 1&#xff1a;写入文字信息 from r…

ubuntu22.04@laptop OpenCV Get Started

ubuntu22.04laptop OpenCV Get Started 1. 源由2. 步骤3. 预期&展望4. 参考资料 1. 源由 OpenCV在学校的时候接触过&#xff0c;不过当时专注在物理、研究方面&#xff0c;没有好好的学习下。 这次借后续视频分析刚性需求&#xff0c;对OpenCV做个入门的学习和研读&#…