【新手引导】Image 的渗透事件

6 篇文章 0 订阅

初试....   

方法一:

新手引导类的渗透事件,用于判定在Mask的遮挡下,监听到点击,执行Mask下方的事件,最后以达到渗透的目的。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class NewBieGuide : MonoBehaviour , ICanvasRaycastFilter
{
    //需要渗透的目标
    private RectTransform target;

    //外部传入
    public void Show(RectTransform target)
    {
        this.target = target;
    }
    
    //处理渗透(目标是否在点击的区域范围内)
    //此方法有重载
    public bool IsRaycastLocationValid(Vector2 sp, Camera eventCamera)
    {
        if (target == null) { return false; } // 事件不会渗透

        return !RectTransformUtility.RectangleContainsScreenPoint(target, sp, eventCamera);
    }
}

方法二:

此方法同样适用于制作新手引导....

当点击下,会返回当前点击处的所有携带RaycastTarget的物体,然后你可以选择需要执行的对应事件

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

public class NewbieGuidePostEvent : MonoBehaviour, IPointerClickHandler
{
    public UnityEvent onClick;

    //按钮的名称
    private string btnName;

    //监听点击
    public void OnPointerClick(PointerEventData eventData)
    {
        //事件穿透
        PassEvent(eventData, ExecuteEvents.pointerClickHandler);
    }

    private void PassEvent<T>(PointerEventData data, ExecuteEvents.EventFunction<T> function) where T : IEventSystemHandler
    {
        var results = new List<RaycastResult>();
        EventSystem.current.RaycastAll(data, results);
        var current = data.pointerCurrentRaycast.gameObject;
        for (int i = 0; i < results.Count; i++)
        {
            //判断穿透对象是否是需要要点击的对象
            if (current != results[i].gameObject)
            {
                if (results[i].gameObject.name == this.btnName)
                {
                    ExecuteEvents.Execute(results[i].gameObject, data, function);
                    onClick.Invoke();
                }
            }
        }
    }

    //外部传参
    public void Show(string btnName)
    {
        this.btnName= btnName;
    }

}

此方法针对Toggle,需要单独处理,这点需要注意,若有不对的地方,感谢大佬指点迷津.....

 

附加注意事项:

1.同名预制的处理

2.按钮长按、点击的区分

3.引导情况下的局部按钮

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值