[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中使用代码动态绑定触发事件

前言:UGUI系统中官方提供了一种Button控件,Button封装了官方提供的一套OnClick事件,如果该GameObject还需要支持按下,移入,移出等事件呢?这时候我们就需要添加EventTr...
  • qq_25210959
  • qq_25210959
  • 2017年05月10日 14:29
  • 625

ugui 添加事件的几种方式

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

全面理解 Unity UI 系统

【狗刨学习网】 随着 Unity 4.6 发布,新 UI 系统终于与大家见面了。 RectTransform Unity UI 系统使用 RectTransform 实现基本的布局和层次控制...
  • book_longssl
  • book_longssl
  • 2015年02月20日 09:28
  • 4120

Unity之UGUI脚本自动生成

Unity之UGUI脚本自动生成
  • qq_26999509
  • qq_26999509
  • 2017年08月09日 00:33
  • 605

UGUI通用脚本

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

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

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

Unity5 AssetBundle管理

//******************************************************************** // 文件名: ABMgr.cs // 描述: Asset...
  • bigpaolee
  • bigpaolee
  • 2015年08月13日 23:55
  • 2619

Unity3d 使用UGUI实现button其他事件处理

怎样才能完成Unity3d使用UGUI实现长按功能呢?可能许多人也不是很清楚,现在我们就来看一下。        UGUI的Button组件只有OnClick事件的监听,要实现长按功能,要监听按下事...
  • u012169685
  • u012169685
  • 2015年06月02日 14:04
  • 5293

uGUI使用代码动态添加Button.OnClick()事件(Unity3D开发之十二)

猴子原创,欢迎转载。转载请注明: 转载自Cocos2Der-CSDN,谢谢!原文地址: http://blog.csdn.net/cocos2der/article/details/42705885 ...
  • yanghuiliu
  • yanghuiliu
  • 2015年01月14日 11:24
  • 37248

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

//绑定按钮事件 foreach (UICheckbox button in transform.GetComponentsInChildren()) { //print (button.n...
  • u010841622
  • u010841622
  • 2014年06月25日 13:43
  • 3346
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[UGUI] 用脚本给UI绑定事件(对比手动绑定)
举报原因:
原因补充:

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