UGUI基于EventTrigger的UI交互事件监听系统&动态加载

UGUI基于EventTrigger的UI交互事件监听系统&动态加载

UGUI中做交互,简单的会用到Button组件,但是仅仅支持点击事件触发;

但有另外一个EventTriggger组件,可以支持更过交互事件:
这里写图片描述

如图,可以为交互UI设置在按下时触发的事件(PointerDown),拖拽触发事件(Drag),等…..

——————–动态添加EventTrigger监听事件:——————————–

如果是制作的预制体按钮,无法存储添加的事件,需要在实例化时动态添加,代码如下:

            /*添加事件*/
            EventTrigger eventTri = insButton.GetComponent<EventTrigger>();//获取实例化按钮下的EventTrigger组件,准备为其添加交互事件

            EventTrigger.Entry entry = new EventTrigger.Entry();
            entry.eventID = EventTriggerType.PointerUp ;//设置监听事件类型

            UnityAction<BaseEventData> callback = new UnityAction<BaseEventData>(PlayControl._instance.OnClickVideo);
            entry.callback.AddListener(callback); 

            eventTri.triggers.Add(entry);

也可以把它打包成一个方法

 /*为eventTrigger添加事件(参数1:添加事件的物体;参数2:事件类型;参数3:需要调用的事件函数)*/
    public void AddEventTrigger(Transform insObject,EventTriggerType eventType, UnityAction<BaseEventData> myFunction)//泛型委托
    {
        EventTrigger eventTri = insObject.GetComponent<EventTrigger>();

        EventTrigger.Entry entry = new EventTrigger.Entry();
        entry.eventID = eventType;

        entry.callback.AddListener(myFunction);
        eventTri.triggers.Add(entry);
    }

注意EventTrigger的AddListener参数是 UnityAction< BaseEventData>泛型委托,如图
这里写图片描述

因此,为其注册的事件方法需要支持 UnityAction< BaseEventData >类参数,如下:
这个参数可以不必使用,但它包含了一些基本事件信息,下面例举了其中一个用途:
因为EventTrigger没有支持右键点击获取点击的交互物体对象,因此我们可以通过BaseEventData获取到pointerCurrentRaycast,即是当前点击point下的对象物体;

    /// <summary>
    /// /*打开右侧选择菜单*/
    /// </summary>
    public void OnClickVideo(BaseEventData arg0)//点选目录视频,eventTrigger事件
    {
        /*左键双击播放*/
        if (Input.GetMouseButtonUp(0))//因为eventTrigger中的selectObject需要在鼠标释放时才能获取,所有用MouseUp
        {
            SelectVideoButton();
        }
        /*右键打开右键菜单*/
        else if (Input.GetMouseButtonUp(1))
        {
            //显示右键菜单,在鼠标点击位置
            PointerEventData P_EveDat = arg0 as PointerEventData;   
            RectTransform selObject = P_EveDat.pointerCurrentRaycast.gameObject.transform as RectTransform;
            RightClickMenu.DisRightClickMenu(selObject);
        }
    }
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值