一、用代码可以为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);
}
}
【2】、用刚才定义的扩展Addlistener()方法添加绑定
数据结构的定义
public class plantInfo
{
//......
public GameObject go;
public stromg seriseNo;
//......
}
public List<plantInfo> plantsList = new List<plantInfo>();
plantsList = ...
//Button PointerEnter 添加侦听
plantsList.ForEach(p=>
{
p.go.GetComponent<Button>().GetComponent<EventTrigger>()
.AddListener(EventTriggerType.PointerEnter, (PointerEventData eventData) =>
{
Debug.Log($"当前Enter的物体:{p.seriseNo}");
endImage = p.go;
});
});