首页 > Unity3D频道 > 【UGUI研究院】 > UGUI研究院之控件以及按钮的监听事件系统(五)
2014
10-27

UGUI研究院之控件以及按钮的监听事件系统(五)

继续学习,我相信大家在做NGUI开发的时候处理事件都会用到UIEventListener,那么UGUI中怎么办呢?先看UGUI的事件有那些吧。

Supported Events

The Eventsystem supports a number of events, and they can be customised further in user custom user written InputModules.

The events that are supported by the StandaloneInputModule and TouchInputModule are provided by interface and can be implemented on a MonoBehaviour by implementing the interface. If you have a valid EventSystem configured the events will be called at the correct time.

IPointerEnterHandler – OnPointerEnter – Called when a pointer enters the object
IPointerExitHandler – OnPointerExit – Called when a pointer exits the object
IPointerDownHandler – OnPointerDown – Called when a pointer is pressed on the object
IPointerUpHandler – OnPointerUp – Called when a pointer is released (called on the original the pressed object)
IPointerClickHandler – OnPointerClick – Called when a pointer is pressed and released on the same object
IBeginDragHandler – OnBeginDrag – Called on the drag object when dragging is about to begin
IDragHandler – OnDrag – Called on the drag object when a drag is happening
IEndDragHandler – OnEndDrag – Called on the drag object when a drag finishes
IDropHandler – OnDrop – Called on the object where a drag finishes
IScrollHandler – OnScroll – Called when a mouse wheel scrolls
IUpdateSelectedHandler – OnUpdateSelected – Called on the selected object each tick
ISelectHandler – OnSelect – Called when the object becomes the selected object
IDeselectHandler – OnDeselect – Called on the selected object becomes deselected
IMoveHandler – OnMove – Called when a move event occurs (left, right, up, down, ect)
ISubmitHandler – OnSubmit – Called when the submit button is pressed
ICancelHandler – OnCancel – Called when the cancel button is pressed

http://docs.unity3d.com/460/Documentation/Manual/SupportedEvents.html

OK 怎么样才能让UGUI监听的方式和NGUI差不多呢? 这里我给大家引一个思路,把下面代码放在你的项目里。

然后在你的界面里面写入监听按钮的代码。

虽然还有一些别的监听方式,但是我觉得这种方式是最科学的,大家可根据自己项目的需求继续拓展EventTriggerListener类。

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!

UGUI研究院之控件以及按钮的监听事件系统(五)》有 84 条评论

  1. 压寨夫人 说:

    能把拖动和滚动的在扩展下吗 像NGUI一样

  2. 刘涛 说:

    能不能系统的讲下EventSystem InputModule 和 Raycast

  3. kk 说:

    UGUI的button没什么没有碰撞体

  4. 小超超 说:

    新手问一下,具体该怎样操作,把脚本添加到哪里?

  5. 下弦月神 说:

    大大,用这套监听之后interactable = false 还是能接收到点击事件,怎么破。。。

  6. jephone 说:

    button双击响应事件要怎么做呢?大神。

  7. 赵川 说:

    用这个方法会在连续快速点击多个按钮的时候一些按钮无法响应,雨大遇到没

  8. game-ttt 说:

    如果我要一个全局的滑动事件,比如切水果,怎么做?

  9. 健一 说:

    MOMO你好,你着个方法有BUG 比如我在一个物体上加了拖动功能,用你的着个方法给物体加OnClick事件 那拖动就失效了

    • 幽雨 说:

      是的,我也碰到了。但是用momo大神以前的代码貌似就没问题。不覆写EventTrigger,而是直接实现相应的接口,就没问题。比如做一个简单 scrollview,其中scrollRect组件控制了,子物体的移动,如果同时要实现子物体点击事件。如果直接用EventTrigger,会拦截scrollRect的拖动事件。但是实现 IPointerClickHandler就没问题,感觉eventTrigger 做了特殊处理。

      • 陈文钊 说:

        这是因为EventTrigger继承了IDragHandler接口,也就是说按钮自己可以接收到onDrag回调,但是又没写处理,所以在ScrollRect下的按钮上面拖动是没反应的。

    • 1 说:

      不是应该加拖动事件为啥加click事件呀

    • TXT 说:

      EventTriggerListener 里面继承各个事件响应接口不继承EventTrigger 就行了

  10. Zzhen551 说:

    MOMO大大,刚刚我看了下unity内UnityEventBase类,其中AddListerner方法时私有的,也就是我们调用的button.onClick.AddListener()并不是新的Button的AddListener,而是老GUI中的。如果你有空可以看下。 void Start () { Button btn = gameObject.GetComponent(); btn.onClick.RemoveAllListeners(); btn.onClick.AddListener(OnClick); } public void OnClick() { Debug.Log(“button===========”); }这个样子的话 是可以动态添加Button的响应事件的。效率会不会很差?

  11. 小手 说:

    scrollrect 製作簡易功能 按鈕跟拖曳之間,監聽異常似乎是 eventtrigger eventsystem 之間的問題

  12. 小三国 说:

    我就在想能不能 NGUI一样 在Eidter里面对MOMO老大写的这个进行改写,然后在编辑界面出现编辑选项,然后用gameobject.sendmessage 的消息函数来发消息,这样就原生的NGUI的方式一样了,而且编辑起来也容易得多。

  13. 猴子 说:

    我尝试了你的方法第一次不成功,每格方法前面要加override然后就可以了。我想问下,我现在要动态生成一个背包,里面有10-50个按钮名字都一样,我该如何识别按的按钮了

    • 雨松MOMO 说:

      是要加 override 。我已经补充进去了。 你的每一个格子对应一个 item类。。在类里记录你每个格子的属性。。 点击按钮的时候 通过ID取到对应的格子类。。

  14. yanx 说:

    不规则按钮,要怎么做。

  15. 杨炜鹏 说:

    MOMO 老大 UGUI研究院之控件以及按钮的监听事件系统(五) - 雨松MOMO程序研究院 - 1 我用UGUI做背包的时候,放在手机上, 点击物品,很容易就会变成移动事件,而不是点击事件,就是说点击不敏感,然后滑动太敏感,搞得手感很差。。。我想了好久,不知道怎么解决这个问题(555),您有空能帮我想想吗?

  16. 雨松大大问个问题,我在Scene窗口里设置我的UI object比如占整个panel的一半大,为什么运行的时候我的UI object 不会随着screen的增大而增大,而是大小不变就占了一小块,怎么使比例固定啊

  17. oy 说:

    瞬间不想用NGUI了,原生的才是最好的啊 UGUI研究院之控件以及按钮的监听事件系统(五) - 雨松MOMO程序研究院 - 1

  18. 孤独的美食家 说:

    感觉和NGUI差不多啊! 试了一下button: onEnter>onSelected>onDown>onUp>onClick>onExit>onUpdateSelected(一直触发,不知道有什么用)还可以加上所有其他UI事件ISubmitHandle(类似NGUI的 onSubmit)r,IDragHandler,IDropHandler,IDeselectHandler,IBeginDragHandler等等等NGUI的EventDelegate事件管理 不知道UGUI写了没有··

  19. c6u2 说:

    这个方式好,相当专业

  20. sam319 说:

    你的方式似乎麻烦了些,如果要监听处理某个ui点击,我会这样写:using UnityEngine;using UnityEngine.EventSystems;public class ClickTrigger : MonoBehaviour, IPointerClickHandler{ public void OnPointerClick(PointerEventData eventData) { Debug.Log(“click”); }}然后这样子直接挂给某个ui,该ui就可以处理点击事件了.题外话,UGUI也有提供EventTrigger组件可以使用,大概类似你的思路,但可以直接在editor上拖曳设定

留下一个回复

你的email不会被公开。