当前位置:网站首页>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
边栏推荐
猜你喜欢

js之节点操作,为什么要学习节点操作

Visualization Road (IX) detailed explanation of arrow class

js之DOM学习获取元素

King glory - unity learning journey

FSM finite state machine

Reflect on the limitations of event bus and the design and implementation of communication mechanism in component development process

H5 local storage data sessionstorage, localstorage

int a = 1存放在哪

How to judge whether a point is within a polygon (including complex polygons or a large number of polygons)

SAP RFC_CVI_EI_INBOUND_MAIN BP主数据创建示例(仅演示客户)
随机推荐
Date对象(js内置对象)
利用网页表格导出EXCEL表格加线框及表格内部间距的问题
超级宝典&编程指南(红蓝宝书)-读书笔记
UnityShader基础
Design optimization of MySQL database
url转成对象
SAP PI/PO rfc2RESTful 发布rfc接口为RESTful示例(Proxy间接法)
数组扁平化
js之预解析
SAP pi / PO rfc2soap publishes RFC interface as WS example
2022.3.14 Ali written examination
js之什么是事件?事件三要素以及操作元素
RGB颜色转HEX进制与单位换算
SAP PI/PO Soap2Proxy 消费外部ws示例
redis连接出错 ERR AUTH <password> called without any password configured for the default user.
系统与软件安全研究(一)
BTREE, B + tree and hash index
快速排序
面经的总结
ABAP 从CDS VIEW 发布OData Service示例