Event Trigerer组件介绍
该组件作用与UI交互,注册行为事件的检测。点击,拖动,滑轮等等行为可以进行注册事件。
方便之处
当我们想给UI组件添加某种行为时,我们会添加相应的组件,比如Button该组件检测点击的行为,如果我们有众多不同的行为呢?一个Image有点击,拖动,鼠标放在上面时,我们要一一进行注册事件,那我们是要进行添加多个组件吗??这样我们会发现会很消耗性能,而且还容易出错,每当添加一个组件时,相应的隐形Bug会随之增加。这时我们就可以用到Event Trigerer组件,用它来进行多个事件的注册进行管理。
事件选择
使用方法
1.拖拽法
写一个脚本,放在一个物体上,将相应的方法放在该组件上。
该方法和之前的Button组件用法一致。
代码添加
和button组件一样,不用进行拖拽说明那个脚本中的某一个方法,而是通过某一脚本本身直接给组件注册事件。
private int _index = 0;
private EventTrigger trigger;
void Start()
{
trigger = GetComponent<EventTrigger>();//首先获取Event Trigger组件
trigger.triggers = new List<EventTrigger.Entry>();//该代码是因为组件Event Trigger组件可以祖册多种事件,所以要用一个集合来管理,所以是triggers 。
EventTrigger.Entry entry = new EventTrigger.Entry();//生成一个事件进行注册
entry.eventID = EventTriggerType.PointerClick;//声明改事件是什么类型的时间
entry.callback.AddListener(bate => ChangColor());//添加函数
trigger.triggers.Add(entry);//正式添加到集合里面,注册事件成功
}
void ChangeColor()//做的改变Image颜色的函数
{
if(_index==0)
{
GetComponent<Image>().color = Color.red;
}
else
{
GetComponent<Image>().color = Color.white;
}
_index = _index == 0 ? 1 : 0;
}
接口法
在脚本中,继承相应的接口,用来实现相应的事件注册。接口的名字就是上面链接里面的事件接口名字。
public class inerfaceevent : MonoBehaviour, IDragHandler,IPointerEnterHandler
{
public void OnDrag(PointerEventData eventData)//该接口的实现是拖拽Image时,Image的位置会和鼠标在世界坐标的位置一致。
{
var rect = GetComponent<RectTransform>();
Vector3 pos = Vector3.zero;
RectTransformUtility.ScreenPointToWorldPointInRectangle(rect, eventData.position, eventData.enterEventCamera, out pos);
rect.transform.position = pos;
}
public void OnPointerEnter(PointerEventData eventData)
{
Debug.Log("IPointerEnterHandler ");
}
}
在该脚本中继承IDragHandler,IPointerEnterHandler两个接口,再分别是实现接口,这样可以就注册成功了。