版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LinZhonglong/article/details/80625118
PS:通常我们可以直接在Image或者Button上添加EventTrigger组件来监听按下、进入等事件的发生。但是手动添加自然有局限性。Button除了在Inspector面板手动赋予对应的Click函数外,我们还可以添加EventTigger组件。甚至可以直接在Awake/Start方法里简单使用btn.OnClick.AddListener(函数)来监听点击事件。说到这里,Image不是Button所以就不能这样简单使用这个API了。所以EventTrigger组件也是很方便使用的。
这里为了方便管理UI上各种点击对象以及事件:
public class UIManager : MonoBehaviour {
public Image img;
public Button btn1;
public ScrollRect rect;
//...
void Awake()
{
AddTriggersListener(img.gameObject,EventTriggerType.PointerClick,MyFunction01);
AddTriggersListener(btn1.gameObject, EventTriggerType.PointerClick, MyFunction02);
AddTriggersListener(rect.gameObject, EventTriggerType.Drag,MyFunction03);
//...
}
void MyFunction01(BaseEventData data)
{
Debug.Log("click event1");
}
void MyFunction02(BaseEventData data)
{
Debug.Log("click event2");
}
void MyFunction03(BaseEventData data)
{
Debug.Log("click event3");
}
private void AddTriggersListener(GameObject obj, EventTriggerType eventID, UnityAction<BaseEventData> action)
{
EventTrigger trigger = obj.GetComponent<EventTrigger>();
if (trigger == null)
{
trigger = obj.AddComponent<EventTrigger>();
}
if (trigger.triggers.Count == 0)
{
trigger.triggers = new List<EventTrigger.Entry>();
}
UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(action);
EventTrigger.Entry entry = new EventTrigger.Entry();
entry.eventID = eventID;
entry.callback.AddListener(callback);
trigger.triggers.Add(entry);
}
其原理也就是给对象添加这个组件,同时注册Listener事件。
从这里也可以看到EventTrigger有很多官方提供的触发API,包括drag拖拽事件等很方便调用。
这样我们就可以方便的管理UI上的对象点击事件等,O.不止是UI。
原作者代码链接:https://www.jianshu.com/p/6831552bbf8b