EventTrigger:更方便地给各种UI添加触发事件

1 篇文章 0 订阅
1 篇文章 0 订阅

EventTrigger:更方便地给各种UI添加触发事件

Ⅰ背景

我们都知道在Unity的Button组件中可以通过Onclick.addlistener()从而对该按钮添加按钮点击事件,如果没有Button组件我们怎么去封装这样一个方法呢。如果我不想要点击事件了,想添加一个鼠标抬起事件等呢。然后我上网查阅资料,发现了EventTrigger这个类,然后自己实践了一下发现确实很好用,今天就来说一下,当然代码和使用方法会在文章结尾送上!
编码完成后你就可以给所有的UI包括但不限于image,text,dropdown,troggle等添加你想要的事件,比如点击,抬起,拖动,选择等.

Ⅱ编码思路

总得来说方法分为6步,它们分别是:
1.给需要的物体添加事件的组件EventerTrigger
2.初始化EventTrigger.Entry容器
3.实例化一个EventTrigger.Entry对象
4.指定事件触发的类型
5.指定事件触发的方法
6.事件加入到entry
7.entry加入到EventTrigger

Ⅲ编码实践

一.展示

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
namespace UITriggerManager
{
 /// <summary>
    /// 对应着EventTriggerType
    /// </summary>
    public enum ContantToEventTriggerType 
    {
        PointerEnter,
        PointerExit,
        PointerDown,
        PointerUp,
        PointerClick,      
        Drag,      
        Drop,      
        Scroll,        
        UpdateSelected,        
        Select,        
        Deselect,        
        Move,        
        InitializePotentialDrag,        
        BeginDrag,        
        EndDrag ,       
        Submit,        
        Cancel,
    }
    public class TriggerEvent
    { 
        static TriggerEvent instance;
        public static TriggerEvent Instance//单例属性访问器
        {
            get
            {
                if (instance == null)
                {
                    instance = new TriggerEvent();
                }
                return instance;
            }
        }
         [HideInInspector]
        public delegate void MyMehod(BaseEventData baseEventData);//方法     
        /// <summary>
        /// 调用该函数即可添加各类方法
        /// </summary>
        /// <param name="obj"></param>
        /// <param name="eventTriggerType"></param>
        /// <param name="myMehod"></param>
        public void addTriggersListener(GameObject obj, ContantToEventTriggerType eventTriggerType, MyMehod myMehod)
        {
            EventTrigger ET = obj.GetComponent<EventTrigger>();
            if (ET == null)
            {
                ET = obj.AddComponent<EventTrigger>();
            }//1, 给需要的物体添加事件的组件EventerTrigger
            if (ET.triggers.Count == 0)
            {
                ET.triggers = new List<EventTrigger.Entry>();//2.初始化EventTrigger.Entry容器
            }
            //实例化一个EventTrigger.Entry对象
            EventTrigger.Entry entry = new EventTrigger.Entry();
            entry.eventID = (EventTriggerType)eventTriggerType;//3.指定事件触发的类型
            UnityAction<BaseEventData> callBack = new UnityAction<BaseEventData>(myMehod); //4.指定事件触发的方法
            entry.callback.AddListener(callBack);//事件加入到entry
            ET.triggers.Add(entry);//entry加入到EventTrigger
        }     
    }

}

二.需要注意的问题

1.首先要注意命名空间的引用
2.我自定义的枚举是跟Unity的EventTriggerType枚举是同顺序的

Ⅳ编码资源和使用方法

链接:https://pan.baidu.com/s/15hs-lF5ZuHyF8tliS09u0w
提取码:zhf5
上面是这就是框架的代码,粘贴到工程以后,

写的新脚本需要注意以下问题(都在注释上)

using UnityEngine;//这是个新的脚本
using UITriggerManager;//1.引用这个
using UnityEngine.EventSystems;//2.引用这个
using UnityEngine.UI;
public class exxample : MonoBehaviour//3.需要挂载在某个对象上
{
    void Start()
    {
        TriggerEvent.Instance.addTriggersListener(gameObject, ContantToEventTriggerType.PointerClick, test);//4.3个参数分别是1. 物体对象 2.触碰类型3.触碰后调用的方法
    }
    void test(BaseEventData eventBase)//5.请注意触碰方法参数一定是BaseEventData类型的,返回值必须是空的
    {
        Debug.Log("如果你看到这个说明你成功了!");
    }
}

Ⅴ总结

蟹蟹大家,有事情请留言~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值