刚写了一个UI点击事件捕获脚本。
using UnityEngine;
using UnityEngine.EventSystems;
public delegate void UIEventHandler(object args);
public class UIEventSender : MonoBehaviour, IPointerClickHandler, IPointerDownHandler,
IPointerUpHandler, IPointerEnterHandler, IPointerExitHandler
{
private UIEventHandler onClickHandler;
private object clickArgs;
private UIEventHandler onPointHandler;
private object downArgs;
private UIEventHandler onUpHandler;
private object upArgs;
private UIEventHandler onEnterHandler;
private object enterArgs;
private UIEventHandler onExitHandler;
private object exitArgs;
public void OnPointerClick(PointerEventData eventData)
{
CallEventHandler(onClickHandler, clickArgs);
}
public void OnPointerDown(PointerEventData eventData)
{
CallEventHandler(onPointHandler, downArgs);
}
public void OnPointerEnter(PointerEventData eventData)
{
CallEventHandler(onEnterHandler, enterArgs);
}
public void OnPointerExit(PointerEventData eventData)
{
CallEventHandler(onExitHandler, exitArgs);
}
public void OnPointerUp(PointerEventData eventData)
{
CallEventHandler(onUpHandler, upArgs);
}
private void CallEventHandler(UIEventHandler evtHandler, object args)
{
if (null == evtHandler)
{
Debug.LogWarning("UIEventSender CallEventHandler evtHandler is null!");
return;
}
try
{
evtHandler(args);
}
catch (System.Exception exp)
{
Debug.LogException(exp);
}
}
}
只要给控件添加一个这样的脚本,给几个事件回调和参数赋值,就可以捕获UI事件了。我没有使用继承UnityEngine.EventSystems.EventTrigger,因为继承它会导致多个事件冲突,比如滚动列表中的Item的点击事件和Drag事件,只能捕获点击事件。