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

注:此文内容所使用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);
    
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值