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

PS:通常我们可以直接在Image或者Button上添加EventTrigger组件来监听按下、进入等事件的发生。但是手动添加自然有局限性。Button除了在Inspector面板手动赋予对应的Click函数外,我们还可以添加EventTigger组件。甚至可以直接在Awake/Start方法里简单使用btn.OnClick.AddListener(函数)来监听点击事件。说到这里,Image不是Button所以就不能这样简单使用这个API了。

 

这里为了方便管理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 action)
    {
        EventTrigger trigger = obj.GetComponent();
        if (trigger == null)
        {
            trigger = obj.AddComponent();
        }

        if (trigger.triggers.Count == 0)
        {
            trigger.triggers = new List();
        }

        UnityAction callback = new UnityAction(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

 

你可能感兴趣的:(Unity开发)