Unity通过脚本代码添加EventTrigger事件和监听
通过脚本代码添加 EventTrigger
事件和监听的主要流程是:
- 获取
EventTrigger.Entry
对象作为触发器的载体 - 设置载体的类型(
eventID
)和监听方法(callback
) - 将载体添加到
EventTrigger
对象的触发器列表(triggers
)中
具体的代码如下:
/// <summary>
/// 为EventTrigger添加事件及事件监听。
/// </summary>
/// <param name="obj">带有或需要添加EventTrigger的对象</param>
/// <param name="eventType">要添加的事件的类型</param>
/// <param name="callback">事件的触发回调</param>
private void AddEventTriggerEvent(Component obj, EventTriggerType eventType, UnityAction<BaseEventData> callback)
{
EventTrigger.Entry entry = null;
EventTrigger trigger = obj.GetComponent<EventTrigger>();
if (trigger != null) // 已有EventTrigger
{
// 查找是否已经存在要注册的事件
foreach (EventTrigger.Entry existingEntry in trigger.triggers)
{
if (existingEntry.eventID == eventType)
{
entry = existingEntry;
break;
}
}
}
else // 添加新的EventTrigger
{
trigger = obj.gameObject.AddComponent<EventTrigger>();
}
// 如果这个事件不存在,就创建新的实例
if (entry == null)
{
entry = new EventTrigger.Entry();
entry.eventID = eventType;
// todo 如果已经存在这个事件,它的callback是否还需要new?
entry.callback = new EventTrigger.TriggerEvent();
}
// 添加触发回调并注册事件
entry.callback.AddListener(callback);
trigger.triggers.Add(entry);
}