在 Unity3D 中,通过拖拽的方式在 EventTrigger 组件中添加监听事件就不多说了,很简单。这里主要说的是通过代码动态往 EventTrigger 组件中添加监听事件,有个很坑的地方,就是通过代码添加的事件,在 inspector 视图中只会显示已经为对象添加了监听事件,但具体监听事件的函数并不显示。

首先需要引用两个程序集:

using UnityEngine.Events;

using UnityEngine.EventSystems;

 

代码如下:

 using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events; public class Cube : MonoBehaviour
{
//获取自己的 EventTrigger 组件
private EventTrigger _eventTrigger;
public EventTrigger eventTrigger
{
get
{
if (_eventTrigger == null)
{
_eventTrigger = this.GetComponent<EventTrigger>();
}
return _eventTrigger;
}
} void Start()
{
AddEventTrigger(EventTriggerType.PointerEnter, Do);
} /// <summary>
/// 给自己添加监听事件
/// </summary>
/// <param name="eventType">监听事件类型</param>
/// <param name="unityAction">监听事件触发的函数</param>
private void AddEventTrigger(EventTriggerType eventType, UnityAction<BaseEventData> unityAction)
{
//判断是否有 EventTrigger 组件,没有就添加
if (eventTrigger == null)
{
this.gameObject.AddComponent<EventTrigger>();
}
//定义回掉函数,委托
UnityAction<BaseEventData> action = new UnityAction<BaseEventData>(unityAction);
//判断 EventTrigger 组件上是否已经存在监听事件,如果有就查找是否存在eventType类型的监听事件
//如果找到了,就赋值,并返回
if (eventTrigger.triggers.Count != )
{
for (int i = ; i < eventTrigger.triggers.Count; i++)
{
if (eventTrigger.triggers[i].eventID == eventType)
{
eventTrigger.triggers[i].callback.AddListener(unityAction);
return;
}
}
}
//定义所要绑定的事件类型
EventTrigger.Entry entry = new EventTrigger.Entry();
//设置事件类型
entry.eventID = eventType;
//设置回掉函数
entry.callback.AddListener(action);
//添加触发事件到EventTrigger组件上
eventTrigger.triggers.Add(entry);
}
/// <summary>
/// 触发事件需要执行的函数,由于UnityAction委托需要一个BaseEventData类型参数,所以需要设置一个BaseEventData类型的形参
/// </summary>
private void Do(BaseEventData baseEventData)
{
print();
}
}

EventTrigger动态添加监听事件的更多相关文章

  1. miniui 给表格行添加监听事件的几种方法以及点击某列列名数据不能排序的问题

    最近在使用miniui框架做开发,在做表格行的点击监听事件中发现了几个属性,都可以起到监听效果但是执行的结果却大有不同.好了废话不多说,直接上代码. <div id="pageGrid ...

  2. Android 给按钮添加监听事件

    在安卓开发中,如果要给一个按钮添加监听事件的话,有以下三种实现方式 1.方式一 public class MainActivity extends ActionBarActivity { @Overr ...

  3. 如何在cocos中为节点添加监听事件

    一般在监听键盘事件时,可是采用以下方式来监听键盘事件: 以及记得定义取消监听的函数(这个摧毁函数会自己调用吗?): 同时这里还有一种传统的监听方式: 但是cocos官方的文档建议我们不要使用这种方式, ...

  4. sencha touch dataview 中添加 button 等复杂布局并添加监听事件

    config 中的属性默认都会自动生成   getter   setter  applier  updater 四个方法. applier 在调用  setter 时被调用, updater 在属性值 ...

  5. 关闭浏览器或者关闭使用window.open打开的页面时添加监听事件

    最近工作中有个需求:点击按钮时打开一个页面,此处取名为page1,打开页面的前提条件是如果有人已经打开过page1页面并且没有关闭时请求ajax判断session是否为空,如果为空则将用户名和文档id ...

  6. ionicModal中的监听事件

    //添加监听事件angular.module('MyApp').directive('gotTapped', ['$ionicGesture', function($ionicGesture) { r ...

  7. JAVAscript学习笔记 js句柄监听事件 第四节 (原创) 参考js使用表

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. js 监听事件的叠加和移除

    html DOM元素有很多on开头的监听事件,如onload.onclick等,见DOM事件列表.但是同一种事件,后面注册的会覆盖前面的: window.onresize = function(){ ...

  9. egret之移除带参数的监听事件

    this.selectBtn.addEventListener(egret.TouchEvent.TOUCH_TAP, this.onClickNewIndo.bind(this,this.data) ...

随机推荐

  1. Runtime 解读

    首先,第一个问题, 1>runtime实现的机制是什么,怎么用,一般用于干嘛? 这个问题我就不跟大家绕弯子了,直接告诉大家, runtime是一套比较底层的纯C语言API, 属于1个C语言库, ...

  2. 第一章 FFmpeg简介

    1.1 FFmpeg的定义 Fast Forward Moving Picture Experts Group(动态图像专家组) 1.2 FFmpeg的历史 1.3 FFmpeg的基本组成 1 FFm ...

  3. JS高级-ES6

    let/const case1 { //js var a = 10 a = 20 // es6 let b = 10 b = 30 const c = 10 c = 40 //报错 } case2 { ...

  4. UEditor (富文本编译器)

    下载网址:https://ueditor.baidu.com/website/download.html 开发文档:http://fex.baidu.com/ueditor/

  5. redis集群相关

    1.主从数据库配置 为master数据库添加slave数据库只需要在从数据库的配置中添加配置: slaveof 主数据库地址 主数据库端口 当然,也可以通过命令: redis-server --por ...

  6. jpg转yuv420抠图后转为jpg

    最近遇到个需求,已有全景图和其中的人脸坐标,将人脸小图从全景图中抠出来,最开始使用libjpeg,奈何使用libjpeg将jpg转为yuv420的资料实在少,libjpeg自身的readme和exam ...

  7. IDEA导入Eclipse项目

    目录 一.导入项目 二.启动项目 一.导入项目 1.欢迎界面,选择Import Project 2.选择源码的位置,点击OK 3.选择Eclipse模型,点击Next 4.默认选择,点击Next 5. ...

  8. halcon批量读取图片

    以前这个代码都是自己写,不仅繁琐,而且容易忘记.其实Halcon中提供了相关的方法.记录一下吧,其实很简单. 读取一个文件夹下的所有图片[助手]>[打开新的image acquisition ] ...

  9. C++ 设置光标问题

    一.隐藏光标 1.引入头文件window.h 2.  定义光标信息结构体变量 CONSOLE_CURSOR_INFO  cursor info={1,0}; typedef struct _CONSO ...

  10. [leetcode]6. ZigZag Conversion字符串Z形排列

    The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...