当前位置: 首页 > news >正文

Unity UGUI实现点击事件穿透

 代码很简单如下 将此代码挂载到上层节点上即可

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class ClickEventPenetration : MonoBehaviour, IPointerClickHandler
{
    public void OnPointerClick(PointerEventData eventData)
    {
        PassEvent(eventData, ExecuteEvents.pointerClickHandler);
    }

    private void PassEvent<T>(PointerEventData pointerEventData, ExecuteEvents.EventFunction<T> eventFunction) where T : IEventSystemHandler
    {
        List<RaycastResult> raycastResults = new List<RaycastResult>();
        //获取射线检测结果
        EventSystem.current.RaycastAll(pointerEventData, raycastResults);
        for (int i = 0; i < raycastResults.Count; i++)
        {
            GameObject resultGameObject = raycastResults[i].gameObject;
            //如果不是自身则将事件传递下去
            if (resultGameObject != null && resultGameObject != this.gameObject)
            {
                //目前只是传递一层如需多层把break去掉即可
                ExecuteEvents.Execute(resultGameObject, pointerEventData, eventFunction);
                break;
            }
        }
    }
}

使用此方案遇到的一些问题以及处理方法

1.下层Button没响应问题

如果只传递一层的情况 Button的Text文本 或者Button下面有遮挡物 并且Raycast Target是true的情况它会传递给Text或者 其他遮挡物 而Button 不会收到点击消息 所以如果想要下层百分百生效 最好的情况是 把Button 下面的遮挡物 Raycast Target设置为false 因为如果一直往下传递的话 当前点击的位置无论叠加多少层Button 他都会响应 所以一直往下传递是不可控的情况

2.下层Toggle没响应问题

再有一种情况是Toggle 我在UI上的Toggle 自身没有Image 组件 Toggle的Target Graphic 设置的是Background 然后事件传递到Backgeround 之后 Toggle并没有响应 所以如果想让Toggle也响应该事件 需要将Toggle的Target Graphic设置为自身 给Toggle添加一个Image 并且Raycast Target 设置为true 并且没有遮挡物即可

相关文章:

  • C++面试宝典第27题:完全平方数之和
  • 基于 Java 的小说阅读器小程序,附源码
  • PVST详解
  • CSS 闪电按钮效果
  • 【python】绘制春节烟花
  • Vagrant 虚拟机工具基本操作指南
  • Nginx反向代理WebSocket
  • SpringMVC-组件解析
  • [C#]winform制作仪表盘好用的表盘控件和使用方法
  • gtkmm 与 Cambalache 与 Gtk::Builder (新手向)_
  • elementPlus实现动态表格单元格合并span-method方法总结
  • DC-8靶机渗透详细流程
  • 【蓝桥杯冲冲冲】[NOIP2017 提高组] 宝藏
  • react中的diff算法
  • MySQL数据库基础与SELECT语句使用梳理
  • Python flask 模板详解
  • 负载均衡下webshell连接
  • 【iOS ARKit】人形遮挡
  • 设置了.gitignore文件,但某些需要被忽略的文件仍然显示
  • ppi rust开发 python调用
  • 马克思主义理论研究教学名师系列访谈|鲍金:给予学生一碗水、自己就要有一桶水
  • 以色列计划“占领加沙”,特朗普下周中东行结束之际将是“机会窗口”
  • 台湾花莲县海域发生5.7级地震,震源深度15公里
  • 争抢入境消费红利,哪些城市有潜力?
  • 贵州黔西游船倾覆事故70名落水人员在院救治,均为轻伤
  • 日本儿童人数已连续44年减少,少子化问题越发严重