[UGUI] 用脚本给UI绑定事件(对比手动绑定)

原创 2015年07月09日 23:07:38

注:此文内容所使用Unity版本为5.1.1f1,在较早的版本中,代码可能略有不同,最后一行代码trigger.triggers.Add(…) 可能为 trigger.delegates.Add(…)

一直觉得用脚本给UGUI绑定事件过程很繁琐,不易记。最近发现如果对比着手动绑定事件的过程,是非常容易记住的,因为两者的过程几乎是一致的,下面对比一下:

一、先来看看手动绑定的过程:

  1. EventTrigger提供了很多事件,我们可以手动给任何UI元素添加一个EventTrigger(如图1),在EventTrigger中可以手动为UI添加鼠标划入、鼠标点击、鼠标划出等一系列非常丰富的事件。

图1
2. 手动添加方法很简单直白,在EventTrigger组件中点击”Add New Event Type”,(如图2)在菜单中选择需要的事件即可添加事件。一个组件可以添加多个事件(图3即为Image对象添加了鼠标进入、鼠标划出两个事件)。
图2

图3
3. 添加好事件以后,在每个事件下通过点击下方的”+”按钮,为事件绑定一个侦听函数,过程很简单不再赘述。每个事件当然也可以绑定多个侦听函数(图4中我们分别为PointerEnter和PointerExit各自添加了两个侦听函数)。需要注意的是,侦听函数的参数必须是BaseEventData类型,因为它接受的是“基础的事件数据”。

这里写图片描述

二、看脚本绑定过程之前先看一下相关的几个类,他们都是包含在UnityEngine.EventSystem命名空间下:

  1. UnityEngine.EventSystem.EventTrigger
    事件触发器,就是手动绑定里第一步我们添加的EvnetTrigger组件,提供了丰富的交互事件

  2. UnityEngine.EventSystem.BaseEventData
    所有新事件系统的事件类型的父类

  3. UnityEngine.EventSystem.EventTrigger.Entry
    一个Entry就是一个事件类型入口,即图2中添加的一个元素。图3中包含了两个Entry。
    Entry保存了事件类型信息(EventID,是EventTriggerType枚举类型)以及一个要调用的事件列表(callback,是TriggerEvent类型,需要初始化),该列表可以通过AddListener来添加多个侦听函数

  4. UnityEngine.EventSystem.TriggerEvent
    一个TriggerEvent是一个可以通知多个函数的委托(通过AddListener来添加)图4中PointerEnter 这个Entry下包含的两个处理函数就是被TriggerEvent通知的两个函数,手动添加的第三步即可以对应为这里的AddListener()

三、下面看看用脚本绑定的过程:

  1. 创建一个C#脚本/类,名称随意,这里叫EventHandler。包含EvnetSystem命名空间,Using UnityEngine.EventSystem由于侦听事件必须依赖事件触发器EventTrigger组件,所以在类上方写上

    [RequireComponent(typeof(UnityEngine.EventSystems.EventTrigger))]
    
  2. 获取EventTrigger引用

    EventTrigger trigger = GetComponent();
    
  3. 声明2个Entry并设置其事件类型,一个设置为鼠标划入,一个设置为鼠标划出。

    EventTrigger.Entry mouseInEntry = new EventTrigger.Entry();
    mouseInEntry.eventID = EventTriggerType.PointerEnter;
    EventTrigger.Entry mouseOutEntry = new EventTrigger.Entry();
    mouseOutEntry.eventID = EventTriggerType.PointerExit;
    
  4. 初始化Entry的callback,并分别向其中添加两个处理函数(对应手动操作是第三步,在每个事件下方点”+”添加函数。处理函数的参数是BaseEventData 类型,具体内容就略过不表)

    mouseInEntry.callback = new EventTrigger.TriggerEvent();
    mouseInEntry.callback.AddListener(OnMouseEnter1);
    mouseInEntry.callback.AddListener(OnMouseEnter2);
    mouseOutEntry.callback = new EventTrigger.TriggerEvent();
    mouseOutEntry.callback.AddListener(OnMouseOut1);
    mouseOutEntry.callback.AddListener(OnMouseOut2);
    
  5. 最后,向trigger的triggers中添加上述两个Entry,结合第3步,对应手动操作的第三步-”Add New Event Type”。

        Trigger.triggers.Add(mouseInEntry);
        Trigger.triggers.Add(mouseOutEntry);
    
版权声明:请尊重原创内容,转载请注明来源及链接。

相关文章推荐

Unity3D【脚本】 给按钮绑定自己的点击事件

//绑定按钮事件 foreach (UICheckbox button in transform.GetComponentsInChildren()) { //print (button.n...

UGUI之用脚本动态的改变Button的背景图片

当我们在制作一些特殊的面板时,有时会通过一个按钮来控制面板的显示与隐藏,同时又要按钮的背景图片能够表明当前面板的显示状态时,这就涉及到动态的改变Button的背景图片了。        先呈上dem...

[UGUI] 用脚本给UI绑定事件2

还有一种更简单的绑定事件的方法——通过一些接口来实现。这些接口定义在UnityEngine.EventSystems中,可以在这里查阅:http://docs.unity3d.com/ScriptRe...

UnityAction和UnityEvent的用法详解

UnityAction本质上是delegate,且有数个泛型版本(参数最多是4个),一个UnityAction可以添加多个函数(多播委托) UnityEvent本质上是继承自UnityEventBas...

ugui 添加事件的几种方式

Unity3D的uGUI系统的将UI可能触发的事件分为12个类型,即EventTriggerType枚举的12个值。如下图所示:     先以PointerClick为例。这个是用于...

UGUI之ScrollRect添加响应事件后不能滑动

今天发现个问题UGUI的ScrollRect组件会和放在它上面的button或者toggle等组件有事件响应的冲突,具体体现为上面的组件会遮挡下面的响应,在button或者toggle等组件上出现只能...

Untiy3D开发小贴士(一)OnEnabled与OnDisabled

设某个组件为NewBehaviour OnEnabled被调用的情况: 1、GameObject添加组件的时候,即AddComponetNewBehaviour> ; 2、包含NewBehaviou...

【Unity/SVN】使用SVN管理Unity项目

追踪Assets和ProjectSettings这两个文件夹

Unity3D杂记

在使用Unity3D的过程中,遇到的一些很小的问题,
  • Neil3D
  • Neil3D
  • 2014-09-05 11:39
  • 3775

UGUI技巧

UGUI技巧 Text中的可以单独指定某些文字的颜色,只需将想要变色的文本放在之间即可,如“吃橙色物品有机会获得红色宝石”,同样适用于NGUI。两张图片,如头像框,头像在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)