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

本文介绍了一种在Unity中管理UI对象点击事件的方法,通过自定义UIManager类实现对Image、Button等UI元素的EventTrigger监听,并提供了添加监听器的具体实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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<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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值