[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);
    
版权声明:请尊重原创内容,转载请注明来源及链接。

UGUI通用脚本

最近在研究UI的东西,在一个网站上学到了不少,就把自己喜欢的东西先码下来,首先就是依照NGUI中的使用方法写的一个脚本EventTriggerListener,代码如下:using UnityEngi...

Unity之UGUI脚本自动生成

Unity之UGUI脚本自动生成

【小松教你手游开发】【unity实用技能】ui加载及初始化

ui加载有几种方法,一个是直接挂在scean里面,一个通过代码instance如:GameObject go = GameObject.Instantiate(Resources.Load(“pref...

UGUI按钮动态绑定和触发方法

FR:海涛高软(QQ技术交流群:386476712)

【Unity3D入门教程】使用C#脚本控制游戏对象

使用C#脚本控制游戏对象,是一项必备的基本技能。Unity3D可以使用的脚本有C#和javascript等。我们主要讲注意力集中在C#上。本文将会介绍怎样使用脚本控制场景中的游戏对象。...
  • zzlyw
  • zzlyw
  • 2017年01月07日 16:47
  • 14078

ugui 添加事件的几种方式

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

Unity3D的断点调试功能

断点调试功能可谓是程序员必备的功能了。Unity3D支持编写js和c#脚本,但很多人可能不知道,其实Unity3D也能对程序进行断点调试的。不过这个断点调试功能只限于使用Unity3D自带的MonoD...

Unity3D 使用异步socket通讯

C# 中Socket的异步方法,都是以Begin开始表示开启异步调用,以End开始表示结束异步调用线程。根据官方文档的介绍,Begin方法会在后台开启线程操作,完成后回调注册函数。分为三个部分,建立连...

【UGUI】Unity4.6 UI按钮绑定事件(四)

阅读这段Unity3d的官方文档我们会发现Unity4.6 UI,有一种更简单的方式来监听Button按钮的点击,MouseIn鼠标滑入,MouseOut鼠标滑出等事件,那就是我们我们可以通过实现各个...
  • aila852
  • aila852
  • 2017年06月09日 15:16
  • 169

【UGUI】Unity4.6 UI按钮绑定事件(一)

一、可视化创建及事件绑定 第一步:通过Hierarchy面板创建button,如图 第二步:创建一个脚本名为TestClick,并定义一个名为Click的public方法 ...
  • aila852
  • aila852
  • 2017年06月09日 10:22
  • 101
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[UGUI] 用脚本给UI绑定事件(对比手动绑定)
举报原因:
原因补充:

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