【Unity3D / UI】 快速处理鼠标事件的方法
来源:互联网 发布:电子书设计软件 编辑:程序博客网 时间:2024/05/17 23:30
Unity的UGUI,处理鼠标事件,需要自行实现IPointerClickHandler,IPointerDownHandler等接口,很不方便。
我们可以把常用接口封装起来,让需要实现鼠标事件的类,继承已经封装好的类即可。
using System;using UnityEngine;using UnityEngine.EventSystems;public class ClickOnListener : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler {#region Actionpublic Action ActClick = delegate {};public Action ActPress = delegate { };public Action ActRelease = delegate { };#endregion#region Click Event/// <summary>/// 当鼠标点击时/// </summary>/// <param name="eventData"></param>public void OnPointerClick(PointerEventData eventData) {ActClick();}/// <summary>/// 当鼠标按下时/// </summary>/// <param name="eventData"></param>public void OnPointerDown(PointerEventData eventData) {ActPress();}/// <summary>/// 当鼠标抬起时/// </summary>/// <param name="eventData"></param>public void OnPointerUp(PointerEventData eventData) {ActRelease();}/// <summary>/// 清除/// </summary>public void Clear() {ActClick = null;ActPress = null;ActRelease = null;}#endregion}
本例封装了三个接口,有需要可以把UI事件接口全部封装起来(见下文)。不过需要注意一个问题,由于这些接口都是空实现,但是只要写了这个方法,哪怕没有实现,Unity的UI消息机制,也会每次将消息发送到这个方法上,会有一定性能开销。
还可以增加一个静态接口,用于发送鼠标事件:
#region Static/// <summary>/// 向指定对象发送点击事件/// </summary>/// <param name="target">目标</param>public static void SendOnClick(GameObject target) {PointerEventData eventData = new PointerEventData(null);target.SendMessage("OnPointerClick", eventData);} #endregion
最后附上一个比较完整的UI事件监听器类,有需要同时处理较多UI事件的情况可以直接使用。
using UnityEngine;using UnityEngine.EventSystems;public class UIEventListener : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerEnterHandler,IPointerExitHandler,IPointerUpHandler, ISelectHandler, IUpdateSelectedHandler, IDeselectHandler, IDragHandler,IEndDragHandler, IDropHandler, IScrollHandler, IMoveHandler{public delegate void UIPointerEventDelegate(GameObject go, PointerEventData data);public delegate void UIBaseEventDelegate(GameObject go, BaseEventData data);public delegate void UIAxisEventDelegate(GameObject go, AxisEventData data);public UIPointerEventDelegate onClick = delegate { };public UIPointerEventDelegate onDown = delegate { };public UIPointerEventDelegate onEnter = delegate { };public UIPointerEventDelegate onExit = delegate { };public UIPointerEventDelegate onUp = delegate { };public UIBaseEventDelegate onSelect = delegate { };public UIBaseEventDelegate onUpdateSelect = delegate { };public UIBaseEventDelegate onDeSelect = delegate { };public UIPointerEventDelegate onDrag = delegate { };public UIPointerEventDelegate onEndDrag = delegate { };public UIPointerEventDelegate onDrop = delegate { };public UIPointerEventDelegate onScroll = delegate { };public UIAxisEventDelegate onMove = delegate { };/// <summary>/// 用于对任意UI对象快速获取UI事件监听器/// </summary>/// <param name="go">对象</param>/// <returns>结果</returns>public static UIEventListener Get(GameObject go){return go.GetOrAddComponent<UIEventListener>();}public void OnPointerClick(PointerEventData eventData){onClick(gameObject, eventData);}public void OnPointerDown(PointerEventData eventData){onDown(gameObject, eventData);}public void OnPointerEnter(PointerEventData eventData){onEnter(gameObject, eventData);}public void OnPointerExit(PointerEventData eventData){onExit(gameObject, eventData);}public void OnPointerUp(PointerEventData eventData){onUp(gameObject, eventData);}public void OnSelect(BaseEventData eventData){onSelect(gameObject, eventData);}public void OnUpdateSelected(BaseEventData eventData){onUpdateSelect(gameObject, eventData);}public void OnDeselect(BaseEventData eventData){onDeSelect(gameObject, eventData);}public void OnDrag(PointerEventData eventData){onDrag(gameObject, eventData);}public void OnEndDrag(PointerEventData eventData){onEndDrag(gameObject, eventData);}public void OnDrop(PointerEventData eventData){onDrop(gameObject, eventData);}public void OnScroll(PointerEventData eventData){onScroll(gameObject, eventData);}public void OnMove(AxisEventData eventData){onMove(gameObject, eventData);}}
1 0
- 【Unity3D / UI】 快速处理鼠标事件的方法
- 【Unity3D / Physical】快速处理碰撞事件的方法
- Unity3d UI中对于鼠标的监听事件
- 鼠标事件的处理
- unity3d 学习笔记___虚拟轴、鼠标事件、双击事件的应用处理
- c++ builder里四种处理“鼠标离开窗体”事件的方法
- DataGrid鼠标事件处理 DataGrid鼠标事件方法
- android的UI事件处理
- 常用的鼠标事件方法
- Android UI事件处理——实现事件监听接口的4种方法
- NGUI ,鼠标检测UI 用到的方法
- JavaScript(js)处理的HTML事件、键盘事件、鼠标事件
- Qt 键盘、鼠标事件的处理
- OpenCV对鼠标事件的处理
- Qt 键盘、鼠标事件的处理
- unity3d之触屏事件的处理
- [Unity3D]简单的鼠标碰撞检测与事件监听
- Unity3d 鼠标的事件GetMouseButtonDown()、GetMouseButton()、GetMouseButtonUp()
- 【Unity3D】对话
- 兄弟单词
- javabean
- 自定义jquery小工具
- 34. Search for a Range
- 【Unity3D / UI】 快速处理鼠标事件的方法
- http://www.open-open.com/lib/view/open1322977704296.html
- 《跟我一起写Makefile》学习笔记(一)
- 5分钟构建一个自己的无人驾驶车
- 从caffe.cpp里学到的一种函数调用的模式
- angularjs ionic 如何使用Cordova 插件
- Android 数据存储
- jquery检测图片加载完成
- 用js语法处理将一个大数组截取成几个小数组的合集