当前位置:网站首页>unity UGUI判断点击在UI上和3D物体上的解决方案
unity UGUI判断点击在UI上和3D物体上的解决方案
2022-04-23 06:27:00 【老少年】
1.通过EventSystem.current.IsPointerOverGameObject()的监听
/****************************************************
文件:ISOnclickUI.cs
作者:
邮箱: [email protected]
日期:2019/08/23 8:56
功能:判断是否点击在UI上
*****************************************************/
using UnityEngine;
using UnityEngine.EventSystems;
public class ISOnclickUI : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
void Update()
{
if (Input.GetMouseButtonDown(0) || (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began))
{
#if IPHONE || ANDROID
if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
#else
if (EventSystem.current.IsPointerOverGameObject())
#endif
Debug.Log("当前触摸在UI上");
else
Debug.Log("当前没有触摸在UI上");
}
}
}
2.UI添加GraphicRaycaster组件,检测是否点击UI
在UI添加GraphicRaycaster组件, 在update里检测是否在ui上
1.先获取点击
PointerEventData data = new PointerEventData(EventSystem.current);
data.pressPosition = Input.mousePosition;
data.position = Input.mousePosition;
2.点击检测_raycaster是本物体的射线检测组件
List<RaycastResult> results = new List<RaycastResult>();
_raycaster.Raycast(data, results);
/****************************************************
文件:ISOnclickUIRaycast.cs
作者:
邮箱: [email protected]
日期:2019/08/23 9:29
功能:UI添加GraphicRaycaster组件,检测是否点击UI
*****************************************************/
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class ISOnclickUIRaycast : MonoBehaviour
{
private GraphicRaycaster _raycaster;
// Start is called before the first frame update
void Start()
{
_raycaster = FindObjectOfType<GraphicRaycaster>();
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButtonDown(0) ){
if (IsUI())
{
Debug.Log("在UI上");
}
else
{
Debug.Log("不在UI上");
}
}
}
private bool IsUI()
{
//获取点击
PointerEventData data = new PointerEventData(EventSystem.current);
data.pressPosition = Input.mousePosition;
data.position = Input.mousePosition;
//点击检测_raycaster是本物体的射线检测组件
List<RaycastResult> results = new List<RaycastResult>();
_raycaster.Raycast(data, results);
return results.Count > 0;
}
}
3.主摄像机添加PhysicsRaycaster,检测点击UI还是3D物体
需要检测的对象上添加IPointerClickHandler的实现,然后拿到PhysicsRaycaster的所有检测对象,名字是谁就检测到谁
/****************************************************
文件:IsOnclickUIor3D.cs
作者:
邮箱: [email protected]
日期:2019/08/23 10:02
功能:主摄像机添加PhysicsRaycaster,检测点击UI还是3D物体,或者
同时点击
*****************************************************/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
public class IsOnclickUIor3D : MonoBehaviour, IPointerClickHandler
{
void IPointerClickHandler.OnPointerClick(PointerEventData eventData)
{
ExecuteAll(eventData);
}
public void ExecuteAll(PointerEventData eventData)
{
List<RaycastResult> results = new List<RaycastResult>();
EventSystem.current.RaycastAll(eventData, results);
foreach (RaycastResult result in results)
{
if (result.gameObject != gameObject)
{
//点击传递给3d物体的点击事件监听
ExecuteEvents.Execute(result.gameObject, eventData, ExecuteEvents.pointerClickHandler);
Debug.Log("在UI上"+"传递"+ result.gameObject);
}
else
{
Debug.Log("在UI上");
}
}
}
}
版权声明
本文为[老少年]所创,转载请带上原文链接,感谢
https://blog.csdn.net/laoshaonian/article/details/100034333
边栏推荐
- Preliminary configuration of OpenGL super Dictionary (freeglut, glew, gltools, GLUT)
- 手游性能优化
- SVG中Path Data数据简化及文件夹所有文件批量导出为图片
- url转成对象
- UnityShader基础
- .NET 5 的新功能 What‘s new in .NET 5
- Reflection on the systematic design of Android audio and video caching mechanism
- h5本地存储数据sessionStorage、localStorage
- SAP PI / Po rfc2restful Publishing RFC interface as restful examples (proxy indirect)
- Ogldev reading notes
猜你喜欢
'NPM' is not an internal or external command, nor is it a runnable program or batch file
SAP DEBUG调试FOR IN、REDUCE等复杂的语句
Apache Hudi 如何加速传统的批处理模式?
Page dynamic display time (upgraded version)
Authorization+Token+JWT
基于NLP的软件安全研究(一)
ABAP 实现发布RESTful服务供外部调用示例
反思 | Android 音视频缓存机制的系统性设计
Reflect on the limitations of event bus and the design and implementation of communication mechanism in component development process
keytool: command not found
随机推荐
14. Transaction processing
SVG中年月日相关的表达式
Reflect on the limitations of event bus and the design and implementation of communication mechanism in component development process
electron-builder打包报错:proxyconnect tcp: dial tcp :0: connectex
ABAP 7.4 SQL Window Expression
What are the total number of all courses of Mr. Tang Xiaoyang, who is very popular in CSDN (question mark)
.NET 5 的新功能 What‘s new in .NET 5
颜色转换公式大全及转换表格(31种)
js之什么是事件?事件三要素以及操作元素
超级宝典&编程指南(红蓝宝书)-读书笔记
对js中argumens的简单理解
SAP PI/PO rfc2RESTful 发布rfc接口为RESTful示例(Proxy间接法)
驼峰命名对像
Judge whether the beginning and end of the string contain target parameters: startswith() and endswith() methods
移动端布局(3D转换、动画)
异步的学习
H5 local storage data sessionstorage, localstorage
手游性能优化
公共依赖模块common的处理
MySQL8.0 安装/卸载 教程【Window10版】