当前位置:网站首页>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
边栏推荐
- ABAP 从CDS VIEW 发布OData Service示例
- What are the total number of all courses of Mr. Tang Xiaoyang, who is very popular in CSDN (question mark)
- 王者荣耀-unity学习之旅
- js之排他思想及案例
- SAP 导出Excel文件打开显示:“xxx“的文件格式和扩展名不匹配。文件可能已损坏或不安全。除非您信任其来源,否则请勿打开。是否仍要打开它?
- CSDN很火的汤小洋老师全部课程总共有哪些(问号问号问号)
- King glory - unity learning journey
- 【自我激励系列】到底是什么真正阻碍了你?
- 2022.3.14 Ali written examination
- SAP CR传输请求顺序、依赖检查
猜你喜欢
随机推荐
2022.3.14 Ali written examination
js案例之求最大值,反转数组,冒泡排序
SAP PI / Po rfc2restful Publishing RFC interface as restful examples (proxy indirect)
js中对象的三种创建方式
ABAP 7.4 SQL Window Expression
Xamarin版的C# SVG路径解析器
Simple random roll call lottery (written under JS)
颜色转换公式大全及转换表格(31种)
系统与软件安全研究(二)
SVG中年月日相关的表达式
5. Sql99 standard: internal connection and external connection
Date object (JS built-in object)
Configure NPM
设置了body的最大宽度,但是为什么body的背景颜色还铺满整个页面?
系统与软件安全研究(五)
基于NLP的软件安全研究(一)
Reflection on the systematic design of Android audio and video caching mechanism
游戏辅助脚本开发之旅
12. Constraints
快速排序









