欢迎光临散文网 会员登陆 & 注册

Unity中UnityEngine.EventSystems 事件系统 鼠标互动接口 IPointer系列简介(1)

2022-08-22 00:43 作者:白白_可乐  | 我要投稿


今天和大家分享位于UnityEngine.EventSystems 的一系列接口,功能包括鼠标点击,鼠标按下与松开,鼠标拖动等.

这一系列的接口默认只能作用在开启了 Raycast Target (默认开启)的 UI 元素身上,

开启射线检测的UI元素(以Image为例)

当然,既然是射线检测,那么只要目标物体有碰撞体,那么就有办法启用这个接口,只需在相机上添加 Physics Raycaster 或者 Physics 2D Raycaster 组件即可.2D和3D并不通用,但可共用.

相机添加射线检测组件

以上是接口前期准备,接下来开始正式介绍:

IPointerDownHandler 接口,可响应鼠标在自身碰撞体范围内按下事件

需要实现 void OnPointerDown(PointerEventData eventData) 方法.


IPointerUpHandler 接口,可响应鼠标在自身碰撞体范围内松开事件

需要实现 void OnPointerUp(PointerEventData eventData) 方法.


IPointerClickHandler 接口,可响应鼠标在自身碰撞体范围内点击事件,什么叫点击呢,就是你在碰撞体范围内按下了,然后又在范围内松开了,这中间是可以移动的,哪怕你移出范围了,只要你松开的时候回来就算.

需要实现 void OnPointerClick(PointerEventData eventData) 方法.


IPointerEnterHandler 接口,可响应鼠标进入自身碰撞体范围事件

需要实现 void OnPointerEnter(PointerEventData eventData) 方法.


IPointerExitHandler 接口,可响应鼠标离开自身碰撞体范围事件

需要实现 void OnPointerExit(PointerEventData eventData) 方法.


IPointerMoveHandler 接口,可响应鼠标在自身碰撞体范围内移动事件

需要实现 void OnPointerMove(PointerEventData eventData) 方法.


IScrollHandler接口,可响应鼠标在自身碰撞体范围内滑动滚轮事件

需要实现 void OnScroll(PointerEventData eventData) 方法.

上面是一个系列(算是我自己分的),接下来是拖拽相关的:

IDragHandler 接口,在事件系统的拖拽相关中,这是个比较关键的接口,虽然只

需要实现void OnDrag(PointerEventData eventData)方法

但是其他的几个接口在没有他的情况下是不完整(或者不工作的),这个方法响应的是拖拽事件,那么所谓拖拽事件,就是鼠标按住不放的情况下移动了,在移动的每一帧都会触发拖拽事件,你按着不动了就暂停触发,继续动继续触发,松开就停止触发.

IInitializePotentialDragHandler接口,检测当前脚本是否实现了前面那个IDragHandler接口,如果脚本有IDragHandler接口的话,在你按下鼠标之后触发本接口(触发时机是晚于IPointerDownHandler)

需要实现void OnInitializePotentialDrag(PointerEventData eventData)方法


IBeginDragHandler接口,当拖拽开始时触发,即按下鼠标开始移动的时候,按着不触发,动的那一帧触发,如果脚本没有实现IDragHandler接口的话不会触发.

需要实现void OnBeginDrag(PointerEventData eventData) 方法.


IEndDragHandler接口,当拖拽结束时触发,松开就是结束.

需要实现void OnEndDrag(PointerEventData eventData) 方法.


IDropHandler接口,既然有拖拽,那么就自然有放置,当你正在拖拽时,如果在实现该接口的物体的碰撞体范围内松开,就会触发该接口,触发时机早于IEndDragHandler接口.

需要实现void OnDrop(PointerEventData eventData) 方法.

接下来要介绍的是和UI行为相关的几个接口,先看图

Input Manager 按钮设置

这张图是默认的 InputManager 的各个按钮的设置,也包括了UI的按钮,比如 Submit,Cancel.

如果你使用的是 InputSystem ,那么则需要在升级后的EventSystem组件中设置各个按钮:

InputSystem 按钮设置

接下来的几个接口,需要 EventSystem.current.currentSelectedGameObject 不为空才会执行.

ICancelHandler 接口,按下UI的取消键时触发,默认是 ESC.

需要实现.void OnCancel(BaseEventData eventData);

IMoveHandler 接口,按上下左右移动至其他UI时触发.

需要实现 void OnMove(AxisEventData eventData);

ISelectHandler 接口,被选中时触发.

需要实现 void OnSelect(BaseEventData eventData);

IDeselectHandler 接口,取消被选中时触发.

需要实现 void OnDeselect(BaseEventData eventData);

ISubmitHandler 接口,按下确认键时触发,默认是回车.

需要实现 void OnSubmit(BaseEventData eventData);

IUpdateSelectedHandler 接口,当EventSystem.current.currentSelectedGameObject 不为空的时候每一帧触发.

需要实现 void OnUpdateSelected(BaseEventData eventData);

事件系统的接口就算是介绍完了,如果看的人多的话我就出个视频具体讲讲.就这样,大家下次再见.


Unity中UnityEngine.EventSystems 事件系统 鼠标互动接口 IPointer系列简介(1)的评论 (共 条)

分享到微博请遵守国家法律