「Unity3D」(2)射线检测与EventSystem判断UI点击

本文介绍了如何在Unity3D中结合射线检测和EventSystem进行UI点击判断。传统方法中,EventSystem处理UI事件,射线检测用于非UI碰撞。然而,手动射线检测可能穿透UI,因此需要封装代码来判断UI元素是否被点击。文章提供了鼠标和触摸的点击判断函数,当射线点中带有Collider的非UI元素时,返回对应的Transform。作者提到这是一个老问题,并预告后续会有更好的实践方案。
摘要由CSDN通过智能技术生成

按照传统的做法,EventSystem用做UI的事件处理,射线检测用做非UI碰撞的判断,但需要手动添加Collider。EventSystem使用了,GraphicRaycaster组件来检测UI元素的事件,其底层还是使用了射线来检测碰撞的。

虽然UI组件勾选Raycast Target能够按照层级关系阻挡穿透,但其阻挡的是UI组件之间的射线穿透。GraphicRaycaster的源码中有 var foundGraphics = GraphicRegistry.GetGraphicsForCanvas(canvas);只会判断Graphic对象,这是UI元素的父类。

那么,手动的射线就会有穿透UI的问题,所以我们需要一个能判断UI元素被点击的需求,看代码封装。

/// <summary>
/// Whether touch down or mouse button down over UI GameObject.
/// </summary>
public static bool IsClickDownOverUI()
{
    #if UNITY_EDITOR
    if (Input.GetMouseButtonDown(0))
    #else
    if (Input.touchCoun
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值