一、相关知识

查看Button的源代码可以发现,就只有onClick而已,如果想要添加其它事件就必须使用EventSystem.EventTrigger和delegate(代理)

EventTrigger 总共提供了17个事件接口供我们调用
1. OnBeginDrag(PointerEventData eventData);
2. OnCancel(PointerEventData eventData);
3. OnDeselect(PointerEventData eventData);
4. OnDrag(PointerEventData eventData);
5. OnDrop(PointerEventData eventData);
6. OnEndDrag(PointerEventData eventData);
7. OnInitializePotentialDrag(PointerEventData eventData);
8. OnMove(AxisEventData eventData);
9. OnPointerClick(PointerEventData eventData);
10. OnPointerDown(PointerEventData eventData);
11. OnPointerEnter(PointerEventData eventData);
12. OnPointerExit(PointerEventData eventData);
13. OnPointerUp(PointerEventData eventData);
14. OnScroll(PointerEventData eventData);
15. OnSelect(BaseEventData eventData);
16. OnSubmit(BaseEventData eventData);
17. OnUpdateSelected(BaseEventData eventData);

二、代码实战

仅需要配置PerformClick.cs的public对象,就不需要用传统的方法对每个button绑定事件了。

传统的方法如下

EventTriggerListener.cs

using UnityEngine;
using UnityEngine.EventSystems;public class EventTriggerListener : EventTrigger {public delegate void VoidDelegate(GameObject obj);public VoidDelegate onClick;public VoidDelegate onDown;public VoidDelegate onUp;public VoidDelegate onEnter;public VoidDelegate onExit;public VoidDelegate onSelect;public VoidDelegate onUpdateSelect;//关联更新public static EventTriggerListener Get(GameObject obj){//这样就不需要为每个按钮添加脚本了EventTriggerListener listener = obj.GetComponent<EventTriggerListener>();if(listener == null){listener = obj.AddComponent<EventTriggerListener>();}return listener;}public override void OnPointerDown(PointerEventData eventData){if (onDown != null) onDown(gameObject);}public override void OnPointerUp(PointerEventData eventData){if (onUp != null) onUp(gameObject);}public override void OnPointerClick(PointerEventData eventData){if(onClick != null) onClick(gameObject);}public override void OnPointerEnter(PointerEventData eventData){if (onEnter != null) onEnter(gameObject);}public override void OnPointerExit(PointerEventData eventData){if (onExit != null) onExit(gameObject);}public override void OnSelect(BaseEventData eventData){if (onSelect != null) onSelect(gameObject);}public override void OnUpdateSelected(BaseEventData eventData){if (onUpdateSelect != null) onUpdateSelect(gameObject);}
}

PerformClick.cs

using UnityEngine;
using UnityEngine.UI;public class PerformClick : MonoBehaviour {public Button btn;// Use this for initializationvoid Start () {EventTriggerListener listener = EventTriggerListener.Get(btn.gameObject);listener.onClick = OnBtnClick;listener.onEnter = OnBtnEnter;}private void OnBtnEnter(GameObject obj){Debug.Log("enter");}private void OnBtnClick(GameObject obj){Debug.Log("click");}
}

Unity EventTrigger相关推荐

  1. unity | EventTrigger(Button按钮按下、抬起等时执行的方法)

    一.常用按钮 按钮组件一般只有当点击时,执行的方法. 点击:需要按下再起来 二.按钮的其他用法 但有时候,我们可能只需要按下的时候执行,或者抬起的时候执行,这时需要在加入按钮组件的时候,再加一个 &l ...

  2. Unity | 什么是委托?

    首先我们要知道内外,unity家族里的东西,想用就用了,实在不行Get一下,基本都可以来回调用,因为再怎么说他们是一家人. Unity家族里都有谁?看链接. unity | 核心类图讲解_菌菌巧乐兹的 ...

  3. EasyTouch_简单触控

    此部分简单触控是指在屏幕上简单的进行点击,拖动,鼠标(手指)按下与松开等功能,此部分unity EventTrigger均可以实现,下边说一下Easy Touch实现 1)事件方法实现 void St ...

  4. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用原型链和EventTrigger

    原型链是JS的必备,作为ECMAScript4,原型链也是支持的. 特别说明,ActionScript3是支持完整的面向对象继承支持的,原型链只在某些非常特殊的情况下使用. 本文旨在介绍如何使用原型链 ...

  5. Unity 基于EventTrigger的UI事件系统

    一.主要思路 其实主要原理就是通过继承EventTrigger并重写相应的函数实现的,只是对其做了一个封装,更方便使用了: 当对某个GameObject使用UIEventManager.Get()函数 ...

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

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

  7. 【Unity实用小知识点】实现按钮长按功能(用EventTrigger实现)

    在一些游戏中可能需要一些按钮长按的功能,但在EventTrigger找了找貌似没有代表长按的功能.感觉EventTrigger通过Down和Up可以实现,就尝试了下. 长按简单小例子 实现点击和长按并 ...

  8. UNITY之EventTrigger,EventListener

    UIEventListener.cs 对一些常用的事件进行了封装和继承. 一,常用事件: void OnClick ():点击事件: void OnDoubleClick ():二次或多次点击事件 v ...

  9. unity UI事件

    由于工作需要到持续按键,所以了解了一下unity UI事件,本文主要转载于http://www.cnblogs.com/zou90512/p/3995932.html?utm_source=tuico ...

最新文章

  1. stm32如何执行软复位_stm32 上电复位 跟软复位有什么区别
  2. IE下及标准浏览器下的图片旋转(二)—— Canvas(2)
  3. 用memcached-session-manager实现Tomcat集群
  4. C# 中 ? 和 ??
  5. 一个基于运气的数据结构,你猜是啥?
  6. JavaScript学习02 基础语法
  7. 电子商务入门、实操、行业分析及公司案例等精彩系列问答有哪些?
  8. 软件架构师的12项修炼——关系技能修炼(2)
  9. linux错误命令数字,Linux 命令及踩坑
  10. c语言flag跳出循环,四种方法跳出多层循环(return goto flag try)
  11. 田金龙老师讲解杨式太极拳的起势
  12. AI遮天传 ML-KNN
  13. js美化alert()弹出框
  14. 基于微信旅游景区购票小程序毕业设计毕设作品(8)毕设论文模板
  15. OpenSSL SM4加密 CMake工程链接失败
  16. java集合光加_阳光沙滩-java集合:使用新建对象检查数组是否包含问题
  17. 项目经理:Redis缓存都会用,那使用后的效益和成本怎么估算?
  18. Electron-vue开发实战 - 文件下载及进度显示
  19. 局域网IP冲突 -- 一次测试
  20. 找出最重的苹果C语言

热门文章

  1. 操作系统的系统调用是怎么一回事呢?
  2. 创新源于模仿之一:TabActivity的美化
  3. (笔记)电路设计(十三)之振荡电路的应用
  4. 鸿蒙和ios兼容吗,和安卓、iOS有何区别?一文看懂鸿蒙手机操作系统
  5. 面向对象设计原则——优先使用对象组合,而不是继承(组合以及与继承的区别)
  6. 分布式文件存储选型考虑点
  7. 搜狗输入法自定义短语--关于时间戳
  8. HT7180是内置开关管2.7V-12V输入,最高12.8V10A120W以上输出的高功率异步升压转换器,效率最高可达94%
  9. js数组indexof用法-1 0 1代表的意思
  10. Matlab2013学习之四种定位技术(TOA、TDOA、RSSI测距、RSSI指纹)