Unity判断是否点击到UI上,获得具体UI物体

2024-08-24 19:32

本文主要是介绍Unity判断是否点击到UI上,获得具体UI物体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

项目中有个点击空白处收起一些操作菜单的需求,以前在NGUI的做法是添加一个不带图片的BoxCollider,然后判断是否点击在这个碰撞盒,UGUI下也可以使用类似的方法,添加一个空的Empty4Raycast来判断点击。本文是在UGUI下,利用EventSystem和射线检测来过滤ui区域,从而实现点击空白事件。

一、EventSystem判断是否点击ui

UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject()

利用这个接口可以知道是否点击到了ui上。

如果需要获得点击到的ui

EventSystem.current.currentSelectedGameObject

但是有个问题,ui上的勾上才能获取到。解决方法如下:

二、利用点击位置射线检测获取UI

/// <summary>
/// 点击屏幕坐标
/// </summary>
/// <param name="position"></param>
/// <returns></returns>
public GameObject GetFirstPickGameObject(Vector2 position)
{EventSystem eventSystem = EventSystem.current;PointerEventData pointerEventData = new PointerEventData(eventSystem);pointerEventData.position = position;//射线检测uiList<RaycastResult> uiRaycastResultCache = new List<RaycastResult>();eventSystem.RaycastAll(pointerEventData, uiRaycastResultCache);if (uiRaycastResultCache.Count > 0)return uiRaycastResultCache[0].gameObject;return null;
}

利用拿到的UI,可以判断过滤某些不需要响应的物体。

补充:传入具体的点击坐标,这个坐标可以是鼠标点击的位置,或者自己自定义的坐标

void Update()
{if (Input.GetMouseButtonDown(0)){//点击后GameObject obj = GetFirstPickGameObject(Input.mousePosition);}
}

 

这篇关于Unity判断是否点击到UI上,获得具体UI物体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1103396

相关文章

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法

《JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法》:本文主要介绍JavaScript中比较两个数组是否有相同元素(交集)的三种常用方法,每种方法结合实例代码给大家介绍的非常... 目录引言:为什么"相等"判断如此重要?方法1:使用some()+includes()(适合小数组)方法2

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

如何通过try-catch判断数据库唯一键字段是否重复

《如何通过try-catch判断数据库唯一键字段是否重复》在MyBatis+MySQL中,通过try-catch捕获唯一约束异常可避免重复数据查询,优点是减少数据库交互、提升并发安全,缺点是异常处理开... 目录1、原理2、怎么理解“异常走的是数据库错误路径,开销比普通逻辑分支稍高”?1. 普通逻辑分支 v

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Linux实现查看某一端口是否开放

《Linux实现查看某一端口是否开放》文章介绍了三种检查端口6379是否开放的方法:通过lsof查看进程占用,用netstat区分TCP/UDP监听状态,以及用telnet测试远程连接可达性... 目录1、使用lsof 命令来查看端口是否开放2、使用netstat 命令来查看端口是否开放3、使用telnet

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Java 中编码与解码的具体实现方法

《Java中编码与解码的具体实现方法》在Java中,字符编码与解码是处理数据的重要组成部分,正确的编码和解码可以确保字符数据在存储、传输、读取时不会出现乱码,本文将详细介绍Java中字符编码与解码的... 目录Java 中编码与解码的实现详解1. 什么是字符编码与解码?1.1 字符编码(Encoding)1

C#和Unity中的中介者模式使用方式

《C#和Unity中的中介者模式使用方式》中介者模式通过中介者封装对象交互,降低耦合度,集中控制逻辑,适用于复杂系统组件交互场景,C#中可用事件、委托或MediatR实现,提升可维护性与灵活性... 目录C#中的中介者模式详解一、中介者模式的基本概念1. 定义2. 组成要素3. 模式结构二、中介者模式的特点

C#中SortedSet的具体使用

《C#中SortedSet的具体使用》SortedSet是.NETFramework4.0引入的一个泛型集合类,它实现了一个自动排序的集合,内部使用红黑树数据结构来维护元素的有序性,下面就来介绍一下如... 目录基础概念主要特性创建和初始化基本创建方式自定义比较器基本操作添加和删除元素查询操作范围查询集合运