在 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. 203. 阿里jetcache

    [视频&交流平台] àSpringBoot视频:http://t.cn/R3QepWG à SpringCloud视频:http://t.cn/R3QeRZc à Spring Boot源码: ...

  2. CMake Error at cuda_compile_generated_warp.cu.o.cmake:264 (message)

    今天,我来给大家分享一下opencv安装时报的错.然后讲错是怎么解决的. 为啥老是写一些环境搭建的博客?因为环境搭建琐碎而繁杂,希望写下来,帮助大家.让大家少走弯路. 专注主业,专注算法的实现和优化. ...

  3. 修改CKplayer.js 源码解决移动端浏览器全屏不能限制快进的问题

    原文地址:https://www.cnblogs.com/jying/p/9642445.html,转载请说明出处. 最近项目需要播放视频且限制未观看部分的快进功能,找了两款js插件ckplayer和 ...

  4. C++ 50学习 之提高对 C++的认识

    转自Effective C++ 理解设计目标. 1.和 C 的兼容性. 2.效率. C++在效率上可以和 C 匹 敌 ---- 二者相差大约在 5%之内. 3.和传统开发工具及环境的兼容性. 4.解决 ...

  5. es6入门set和map

    ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化. var set = new Set([1, ...

  6. springboot整合websocket实现一对一消息推送和广播消息推送

    maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  7. 更改Oracle字符集避免乱码

    如何更改Oracle字符集避免乱码 转一位大神的笔记. 国内最常用的Oracle字符集ZHS16GBK(GBK 16-bit Simplified Chinese)能够支持繁体中文,并且按照2个字符长 ...

  8. springboot整合devtool无法热部署

    参见https://www.cnblogs.com/winner-0715/p/6666579.html.

  9. 针对piix4_smbus ****host smbus controller not enabled的解决方法

    SMBus 目录 SMBus与I2C的差别 SMBus 是 System Management Bus 的缩写,是1995年由Intel提出的,应用于移动PC和桌面PC系统中的低速率通讯.它主要是希望 ...

  10. django 环境配置.

    1. 一个虚拟环境对应一个 dajngo项目 2. mkvirtruenv pycham 创建Pure Python 新项目,不是Django 2018.3 其他版本 3.  Add Configur ...