Unity(十)使用EventTrigger组件监听点击等事件

版权声明:本文为博主原创文章,未经博主允许不得转载。 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


猜你喜欢

转载自blog.csdn.net/LinZhonglong/article/details/80625118
今日推荐