跳到主要内容

UI事件监听接口

1、事件接口是用来解决什么问题的 目前所有的控件都只提供了常用的事件监听列表,如果想做一些类似长按、双击、拖拽等功能是无法制作的,或者想让Image或Text,RawImage三大基础控件能够响应玩家输入也是无法制作的

而事件接口就是用来处理类似问题,让所有控件都能够添加更更多的事件监听来处理对应的逻辑

2、有哪些事件接口 (1)常用事件接口

继承接口 函数 作用 IPointerEnterHandler OnPointerEnter 当指针进入对象时调用(鼠标/触碰进入) IPointerExitHandler OnPointerExit 当指针退出对象时调用(鼠标离开) IPointerDownHandler OnPointDown 在对象上按下指针时调用(按下) IPointerUpHandler OnPointerUp 松开指针时调用(在指针正在点击的游戏对象上调用)(抬起) IPointerClickHandler OnPointerClick 在同一对象上按下再松开指针时调用(点击) IBeginDragHandler OnBeginDrag 即将开始拖动时在拖动对象上调用(开始拖拽) IDragHandler OnDrag 发生拖动时在拖动对象上调用(拖拽中) IEndDragHandler OnEndDrag 拖动完成时在拖动对象上调用(结束拖拽) (2)不常用事件接口,了解即可

继承接口 函数 作用 IInitializePotentialDragHandler OnInitializePotentialDrag 在找到拖动目标时调用,可用于初始化值 IDropHandler OnDrop 在拖动目标对象上调用 IScrollHander OnScroll 当鼠标滚轮滚动时调用 IUpdateSeletedHandler OnUpdateSeleted 每次勾选时在选定对象上调用 ISeltectHandler OnSelect 当对象成为选定对象时调用 IDeselectHandler OnDeselect 取消选择选定对象时调用 导航相关
IMoveHandler OnMove 发生移动事件(上、下、左、右等)时调用 ISubmitHandler OnSubmit 按下Submit按钮时调用 ICancelHandler OnCancel 按下Cancel按钮时调用 注意:如果Image需要被响应,一定要能够接受射线检测(勾选Raycast Target)

3、使用事件接口 (1)继承MonoBehavior的脚本继承对应的事件接口,引用命名空间

(2)实现接口中的内容

(3)将该脚本挂载到想要监听自定义事件的UI控件上


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.U2D;
using UnityEngine.UI;

public class Lesson : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerDownHandler, IPointerUpHandler,IDragHandler {
// 鼠标进入/离开在移动设备上是不存在的,因为不存在进入/离开的概念
public void OnPointerEnter(PointerEventData eventData) {
print("鼠标进入");
}

public void OnPointerExit(PointerEventData eventData) {
print("鼠标离开");
}

public void OnPointerDown(PointerEventData eventData) {
print("鼠标(触碰)按下");
print(eventData.pointerId);
}

public void OnPointerUp(PointerEventData eventData) {
print("鼠标(触碰)抬起");
}

public void OnDrag(PointerEventData eventData) {
print(eventData.delta);
}
}


4、PointerEventData参数的关键内容 父类:BaseEventData pointerId 鼠标左右中键点击鼠标的ID,通过它可以判断左(-1)/中(-3)/右键(-2)哪一个键点击 position 当前指针位置(屏幕坐标系) pressPosition 按下的时候指针的位置 delta 指针移动增量 clickCount 连击次数 clickTime 点击时间(得到的是系统时间,通过两次事件相减得到间隔时间) pressEventCamera 最后一个OnPointerPress按下事件相关的摄像机 摄像机用于坐标系转换
enterEventCamera 最后一个OnPointerEnter进入事件关联的摄像机 5、总结 好处:需要监听自定义事件的控件挂载继承实现了接口的脚本就可以监听到一些特殊事件,可以通过它实现一些长按,双击拖拽等功能

坏处:不方便管理,需要自己写脚本继承接口挂载到对应控件上,比较麻烦