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("如果你看到这个说明你成功了!");
}
}
Ⅴ总结
蟹蟹大家,有事情请留言~~~