在面对Button时,我们可以很轻松的处理各类点击等事件,然而在Image,Text等UI元素上,如何监听各类事件并作出反应呢?
就要用到EventTrigger啦。他可以接受所有来自EventSystem的事件,并且为每个事件调用注册好的函数。EventTrigger可以用来对每个事件指定你想要的函数,你可以在一个事件上指定多个函数,无论什么时候EventTrigger收到这个事件,他将会按照你给的顺序进行调用。
注意:将这个组件附给某个游戏物体将会使得这个游戏物体监听所有的事件,同时,没有事件会传播给父物体。(占个坑,这句话什么意思,一时没看懂,下次看懂再来改)
你有两种方式来监听事件:
1、来首先看看这个组件内容把
最简单的方式就是点击Add New Event Type,然后会事件哦,根据你的需要选择,比如这个,我选择的是PointerEnter,调用了RawImage物体(这个是根据你自己选择的)上的一个自己写的函数,作用是改变颜色,所以当我的鼠标碰到这个图片的时候,它的颜色会改变,因为调用了这个函数。
2、第二种方式就是重写这个函数,例如同样的这个功能。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class MyEventTrigger : EventTrigger {
public override void OnPointerEnter(PointerEventData eventData)
{
base.OnPointerEnter(eventData);
this.GetComponent<RawImage>().color = new Color(0.6f, 0.6f, 0.6f);
}
}
或者是指定单独的委托,如下官网的例子。
using UnityEngine;
using UnityEngine.EventSystems;
public class EventTriggerDelegateExample : MonoBehaviour
{
void Start()
{
EventTrigger trigger = GetComponent<EventTrigger>();
EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = EventTriggerType.PointerDown;
entry.callback.AddListener((data) => { OnPointerDownDelegate((PointerEventData)data); });
trigger.triggers.Add(entry);
}
public void OnPointerDownDelegate(PointerEventData data)
{
Debug.Log("OnPointerDownDelegate called.");
}
}