1、EventTrigger 事件触发器是什么

一个EventTrigger组件,是一个集成了所有UI事件监听接口的脚本,可以让我们更方便地为控件添加事件监听

2、如何使用事件触发器

在对象的Inpector窗口中->Add Component->Event Trigger->Add New Event Type,选择响应类型

在实际应用场景上,我们为了更好地管理UI的逻辑,通常会在一个Panel中添加UI组件,通过Panel关联的脚本对其中的UI对象进行逻辑处理,而事件监听接口需要将脚本直接和相应的UI关联,如果按照常规操作,那么Panel脚本就没办法对UI对象的逻辑进行管理,这是不太方便的,因此在进行事件监听时,通常是在监听脚本中声明对应的委托/事件,并在事件监听函数中调用委托/事件,而再Panel脚本中则可以通过应用情况对监听脚本中的委托/事件添加逻辑代码,从而实现较好地管理,比如,一个长按的事件监听脚本:

/// <summary>
/// 长按按钮脚本,提供两个Event给外部,让外部去处理对应的逻辑
/// </summary>
public class LongPress : MonoBehaviour, IPointerDownHandler, IPointerUpHandler {public event UnityAction upEvent;public event UnityAction downEvent;public void OnPointerDown(PointerEventData eventData) {downEvent?.Invoke();}public void OnPointerUp(PointerEventData eventData) {upEvent?.Invoke();}
}

而在Panel脚本中:

public class GamePanel : MonoBehaviour {// 关联长按功能按钮public LongPress longPress;void Start() {longPress.downEvent += BtnDown;longPress.upEvent += BtnUp;}private void BtnUp() {// 鼠标抬起的逻辑代码}private void BtnDown() {// 鼠标按下的逻辑代码}
}

那么在对UI对象上抬起和按下时,就会执行Panel脚本中实现的逻辑代码,这也差不多是事件触发器的原理


(1)拖曳脚本进行关联

参数为BaseEventData

public void TestPointEnter(BaseEventData data) {PointerEventData eventData = data as PointerEventData;print("鼠标进入 " + eventData.position);
}

步骤与之前的类似


(2)代码添加

EventTrigger中管理监听的是一个triggers列表,triggers 其实是一个Entry类型的List,其中Entry有响应事件的id枚举与对应的callback函数,通过将这些信息添加到这个List,就可以实现监听的功能

public class Lesson : MonoBehaviour {// 将相应UI对象的触发器进行关联public EventTrigger et;private void Start() {// 声明一个需要监听的事件对象,EventTrigger.Entry entry = new EventTrigger.Entry();// 声明事件的类型entry.eventID = EventTriggerType.PointerUp;// 监听函数关联entry.callback.AddListener((data) => {print("代码监听:抬起");});// 把声明好的事件对象加入到EventTrigger中et.triggers.Add(entry);// 每次添加新的监听类型都需要new一个新对象entry = new EventTrigger.Entry();// 声明事件的类型entry.eventID = EventTriggerType.PointerExit;// 监听函数关联entry.callback.AddListener((data) => {print("代码监听:离开");});// 把声明好的事件对象加入到EventTrigger中et.triggers.Add(entry);}
}

如果new了两个一样的事件监听类型也不会报错,可以通过这样添加代码,也可以通过遍历triggers的Entry,通过类型寻找,找到相应类型后直接在callback中添加相应的函数也可以

3、总结

EventTrigger可以让我们写更少的代码,可以在面板类中处理面板控件的事件逻辑,更加的面向对象,便于管理

EventTrigger 事件触发器相关推荐

  1. WPF系列教程(二十九):触发器Triggers、MultiTrggers、EventTrigger——属性触发器、多触发器、事件触发器

    使用触发器可以自动完成简单的样式改变. 项目源码 触发器 在Style定义时使用Style.Triggers属性来实现: <!--设置触发器--> <Style.Triggers&g ...

  2. js事件触发器fireEvent和dispatchEvent

    转自:https://www.cnblogs.com/tiger95/p/6962059.html 事件触发器就是用来触发某个元素下的某个事件,IE下fireEvent方法,高级浏览器(chrome, ...

  3. 二十五、Node中的Buffer缓冲器和EventEmitter事件触发器

    @Author:Runsen @Date:2020/6/5 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  4. Oracle入门(十四.22)之创建DDL和数据库事件触发器

    一.什么是DDL和数据库事件触发器? DDL语句触发DDL触发器:CREATE,ALTER或DROP. 数据库事件触发器由数据库中的非SQL事件触发,例如: •用户连接到数据库或与数据库断开连接. • ...

  5. Oracle触发器4-数据库事件触发器

    创建数据库事件触发器语法 1 CREATE [OR REPLACE] TRIGGER trigger_name 2 {BEFORE | AFTER} {database_event} ON {DATA ...

  6. 【PostgreSQL-9.6.3】事件触发器

    当预定的事件发生时,事件触发器就会被触发.由于事件触发器设计的权限比较大,所以只有超级用户才能创建和修改触发器. 1. 事件触发器支持的事件分三类:ddl_command_start, ddl_com ...

  7. javascript事件触发器

    概述 事件触发器就是用来触发某个元素下的某个事件,IE下fireEvent方法,高级浏览器(chrome,firefox等)有dispatchEvent方法. 一般我们在元素上绑定事件后,是靠用户在这 ...

  8. Unity碰撞体不碰撞以及代码添加EventTrigger事件

    文章目录 前言 一.同类型物体的碰撞体不发生碰撞 二.代码控制EventTrigger添加事件 总结 前言 本文所记内容有两点: 一.同类型物体的碰撞体不发生碰撞. 二.代码控制EventTrigge ...

  9. 【Azure 架构师学习笔记】-Azure Data Factory (4)-触发器详解-事件触发器

    本文属于[Azure 架构师学习笔记]系列. 本文属于[Azure Data Factory]系列. 接上文[Azure 架构师学习笔记]-Azure Data Factory (3)-触发器详解-翻 ...

最新文章

  1. 图片裁剪的js有哪些(整理)
  2. 1.gcForest 包安装和集成学习方法的 Python 实现2.minepy安装方法(Windows版本)
  3. window.open使用
  4. Java基础 集合(Collection)结构详解 Collection和Collections的区别
  5. [二叉树]二叉树中和为某一值的路径 (剑指offer24)
  6. Python变量、脚本名称、函数命名规范
  7. kali linux 里vim如何使用_Linux vim基本的使用方法
  8. 第二季-专题18-网卡搭建新通道
  9. Future机制原理
  10. 锐捷长ping_锐捷网络 RG-NBR3000(带机量1000台)
  11. 计算机上网记录怎么清除,电脑浏览器上网记录怎么删除
  12. 【C++】error: passing ‘const xxx’ as ‘this’ argument discards qualifiers [-fpermissive]
  13. 交换安全(局域网安全)
  14. 墨天轮沙龙 | 麦杰科技卢学东:openPlant 实时数据库系统及应用
  15. Scratch编程初体验-小猫跳舞
  16. 查快递单号物流信息查询,支持多家快递
  17. 微信公众号推送天气(最近超火的小玩意)
  18. 跟着开源项目学因果推断——FixedEffectModel 固定效应模型(十七)
  19. cad 打开硬件加速卡_谁说没有核显就不能开启硬件加速?手把手教你开启加速
  20. 辽宁移动数码视讯Q5_S905M_8189ETV双内存_NAND_线刷固件包

热门文章

  1. ST-LINK/V2 烧录固件
  2. 星期五计算机,黑色星期五之夜电脑人
  3. uniapp sl-filter条件筛选组件
  4. 马云再次成功了!刚刚,阿里巴巴正式宣布再出两大产品!
  5. 批量将json文件转为jpg格式
  6. jconsole本地连接失败
  7. UOS下的任务管理器 ---- 【系统监视器】
  8. 文件/文件夹管理与操作命令
  9. 爪哇部落 新生选拔赛 2020
  10. 密码加密之bcrypt