EventTrigger动态添加监听事件
在 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动态添加监听事件的更多相关文章
- miniui 给表格行添加监听事件的几种方法以及点击某列列名数据不能排序的问题
最近在使用miniui框架做开发,在做表格行的点击监听事件中发现了几个属性,都可以起到监听效果但是执行的结果却大有不同.好了废话不多说,直接上代码. <div id="pageGrid ...
- Android 给按钮添加监听事件
在安卓开发中,如果要给一个按钮添加监听事件的话,有以下三种实现方式 1.方式一 public class MainActivity extends ActionBarActivity { @Overr ...
- 如何在cocos中为节点添加监听事件
一般在监听键盘事件时,可是采用以下方式来监听键盘事件: 以及记得定义取消监听的函数(这个摧毁函数会自己调用吗?): 同时这里还有一种传统的监听方式: 但是cocos官方的文档建议我们不要使用这种方式, ...
- sencha touch dataview 中添加 button 等复杂布局并添加监听事件
config 中的属性默认都会自动生成 getter setter applier updater 四个方法. applier 在调用 setter 时被调用, updater 在属性值 ...
- 关闭浏览器或者关闭使用window.open打开的页面时添加监听事件
最近工作中有个需求:点击按钮时打开一个页面,此处取名为page1,打开页面的前提条件是如果有人已经打开过page1页面并且没有关闭时请求ajax判断session是否为空,如果为空则将用户名和文档id ...
- ionicModal中的监听事件
//添加监听事件angular.module('MyApp').directive('gotTapped', ['$ionicGesture', function($ionicGesture) { r ...
- JAVAscript学习笔记 js句柄监听事件 第四节 (原创) 参考js使用表
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js 监听事件的叠加和移除
html DOM元素有很多on开头的监听事件,如onload.onclick等,见DOM事件列表.但是同一种事件,后面注册的会覆盖前面的: window.onresize = function(){ ...
- egret之移除带参数的监听事件
this.selectBtn.addEventListener(egret.TouchEvent.TOUCH_TAP, this.onClickNewIndo.bind(this,this.data) ...
随机推荐
- Activiti流程设计工具
在Actitivi工程的src/main/resources新建一个文件夹diagrams 然后右键,创建一个activiti Diagram 取名为helloWorld后finish 中间区域,是我 ...
- day37协程与线程套接字通讯
协程与线程套接字通讯基于多线程实现套接字服务端支持并发,服务端 from socket import * from threading import Thread def comunicate(con ...
- 在线安装TIDB集群
在线安装TiDB集群 服务器准备 说明:TiDB8需要能够连接外网,以便下载各类安装包 TiDB4非必须,但最好是有一台,因为后续测试Mysql数据同步或者进行性能比较时,都要用到 TiKV最好是采 ...
- 安装和激活Office 2019
有条件请支持正版!相比费尽力气找一个可能不太安全的激活工具,直接买随时随地更新的Office 365确实是最好的办法.暂时没有经济实力的,可以看看这篇文章.下载OTP工具 首先到Office Tool ...
- python 列表 list的基本操作
一,Python 的列表数据类型包含更多的方法. 这里是所有的列表对象方法: list.append(x) 把一个元素添加到链表的结尾,相当于 a[len(a):] = [x] . list.exte ...
- JMeter处理返回结果unicode转码为中文
问题举例: { "ServerCode":"200","ServerMsg":"\u6210\u529f"," ...
- 剑指offer例题——链表中倒数第K个结点
题目描述 输入一个链表,输出该链表中倒数第k个结点. 编程过程 此处采用两个指针依次后移的方法来求解,首先,用一个指针移到第k个位置,之后将第二个指针放在第一位,与第二个指针一同移动,当第二个指针移动 ...
- elasticsearch-权威指南笔记-基础部分
参考这里的文档es权威指南 话说这个坑爹的文档是2.x版本的es,英文版本也是,所以就没啥好抱怨的了. 官方教程中有很多坑 例如,需要启动text上的索引. 还有就是get这个是不能带json的,所以 ...
- jq 切换功能toggle
---恢复内容开始--- $(document).ready(function () { $(".jianjie").click(function () { $(this).tog ...
- 大数据入门到精通10--spark rdd groupbykey的使用
//groupbykey 一.准备数据val flights=sc.textFile("data/Flights/flights.csv")val sampleFlights=sc ...