如何用AddListener为PointerEvent增加事件绑定

622 阅读1分钟

一、用代码可以为OnPointerEnter添加Addlisteners绑定?

如下所示,(1)是对的,但是(2)是有问题的

答曰:不能
在这里插入图片描述

二、EventTrigger的面板配置

在这里插入图片描述

三、那么,如何用代码来实现OnPointerEnter的事件绑定呢?

【1】、为EventTrigger定制一个扩展方法——Addlistener()

/// <summary>
/// 扩展的方法
/// </summary>
public static class ExtensionMethods
{
    /// <summary>
    /// 为EventTrigger的事件类型绑定Action方法
    /// </summary>
    /// <param name="trigger">EventTrigger组件对象</param>
    /// <param name="eventType">事件类型</param>
    /// <param name="listenedAction">要执行的方法</param>
    public static void AddListener(this EventTrigger trigger, EventTriggerType eventType, Action<PointerEventData> listenedAction)
    {
        EventTrigger.Entry entry = new EventTrigger.Entry();
        entry.eventID = eventType;
        entry.callback.AddListener(data => listenedAction.Invoke((PointerEventData)data));
        trigger.triggers.Add(entry);
    }
}

12345678910111213141516171819

【2】、用刚才定义的扩展Addlistener()方法添加绑定

数据结构的定义

public class plantInfo
{
    //......
    public GameObject go;
    public stromg seriseNo;
    //......
}

public List<plantInfo> plantsList = new List<plantInfo>();
plantsList  = ...

12345678910
//Button PointerEnter 添加侦听
plantsList.ForEach(p=> 
{
    p.go.GetComponent<Button>().GetComponent<EventTrigger>()
    .AddListener(EventTriggerType.PointerEnter, (PointerEventData eventData) =>
    {
        Debug.Log($"当前Enter的物体:{p.seriseNo}");
        endImage = p.go;
    });
});

12345678910