当前位置: 首页 > 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 并且没有遮挡物即可

http://www.dtcms.com/a/8169.html

相关文章:

  • 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调用
  • 【软件设计师】普及软件知识产权中的商标法与专利法
  • 【开源】JAVA+Vue.js实现开放实验室管理系统
  • 识别CMS指纹与WAF识别
  • ChatGPT论文指南|ChatGPT论文写作过程中6个润色与查重提示词
  • axios get 请求 url 转码 空格转成+,导致请求失败(前端解决)
  • 机器学习系列——(十六)回归模型的评估
  • 百面嵌入式专栏(面试题)进程管理相关面试题1.0
  • 网易和腾讯面试题精选---性能和优化面试问题
  • 编辑器Zed
  • STM32单片机基本原理与应用(四)