【Unity】入门学习笔记180620——UI设计(12)——与UI源代码协同工作

Event Syetem及其功能

事件和委托机制

操作示例

开源及其应用方式


1、EventSystem可视为一类强大的管理系统,并提供了下列功能项:

#  对输入系统进行分类

#  监听当前输入状态

#  维护当前所选的GameObject

#  更新各个输入系统

#  针对输入和屏幕系统之间的光线投射测试进行编组

需要注意的是,场景中仅存在单一的EventSystem管理器,且与添加数量无关。

EventSystem的核心内容表示为静态实例,同时仅存在单一实例。


2、事件循环系统

事件系统输入扫描向UI进行光线投射缩放并绘制UI事件系统 实现循环操作

#Event System:循环开始,验证场景中处于活动状态的、输入系统的细节内容,并在开启下一阶段时对此类输入进行测试

#解析过程:一旦管理器识别输入类型(鼠标、键盘、触摸操作等),依次通知各输入系统并收集其当前状态

#处理过程:当输入系统获取各自状态时,将回调Event System,并通过现有的光线投射系统向场景中投射光线(物理光线投射器、图形投射器等),确定GameObject是否与用户输入间彼此交互。随后,在通知相关GameObject时,引发某些事件。

#后续处理:当Event System处理完毕后,执行渲染操作。

#返回至Event System:结束当前操作后,重复上述行为。


3、状态控制

在其他方面,EventSystem还可以确定当前所执行的体验状态,包括:

#所测试的输入系统

#当前选择内容,包括最初和最后所选取的对象


4、光线投射编组

针对光线投射测试,EventSystem还可表示为转向管理器,且全部路径均返回至EventSystem

当输入模块需要验证事务是否被某一特定输入交互行为所通知时,针对输入行为,将询问EventSystem当前坐标附近是否村咋子对应内容。随后,EventSystem将使用该位置,并遍历Canvas所注册的全部光线投射模块,进而查看是否产生碰撞。

当前所支持的光线投射模块包括如下几种:

#  物理光线投射器:测试场景中的3D对象

#  物理2D光线投射器:测试场景中的2D对象

#  图形光线投射器:测试场景中的UI对象

#  其他光线投射器:用户可构建自己的光线投射测试组件


5、与事件协同工作

新UI系统中引入了最新的 UnityEvent 逻辑,并实现了标准化和委托机制,进而管理场景中GameObject间的交互行为,即主要几种于基于新UI的输入交互行为。

简单的事件委托:

public UnityEvent myUnityEvent=new UnityEvent();

myUnityEvent.AddListener(MyAwesomeDelegate);

myUnityEvent.Invoke();


#使用参数

可采用希望传递的信息数据类型继承UnityEvent类

如果未向类中添加 [Serializable] 标签,UnityEvent将不会出现于编辑器的查看器中


#内建事件接口

Pointer事件:

    IPointerEnterHandler:当鼠标指针进入到UI对象的Rect Transform区域时出现

    IPointerExitHandler:当鼠标指针离开UI对象的Rect Transform区域时出现

    IPointerDownHandler:当按下可选取的UI控件(如按钮)时出现

    IPointerDownHandler:当释放可选取的UI控件(如按钮)时出现

    IPointerClickHandler:当单击可选取的UI控件(按下和释放操作)时出现

Drag Handlers事件:

    IInitializePotentialDragHandler:拖拽的首个点

    IBeginDragHandler:表示确认后的、已开始的拖拽行为

    IDragHandler:表示被拖拽的UI组件

    IEndDragHandler:表示已释放的UI拖拽组件

    IDropHandler:等同于拖拽结束操作但不包含拖拽数据

Miscellaneous事件:

    IScrollHandler:当检测到输入设备上的滚动操作时被引发,例如鼠标滚轮

    IUpdateSelectedHandler:当所选UI控件被更新或调整时引发

    ISelectHandler:当UI控件被选取或处于焦点状态时引发

    IDeselectHandler:当UI控件被反选或失去焦点状态时引发

    IMoveHandler:当移动摇杆时引发(使用Input.GetAxis)

    ISubmitHandler:当按下Submit按钮时引发(默认时为Enter键)

    ICancelHandler:当按下Submit按钮时引发(默认时为Esc键)


#执行事件

using UnityEngine.EventSystems;

public class Tooltip : MonoBehaviour, IPointerEnterHandler

对接口添加相应的处理方法

public void OnPointerEnter(PointerEventData eventData)

{

}


6、构建自定义句柄或事件

当构建自定义事件时,首先需要定义如下内容:

#自定义事件的数据结构(拓展自BaseEventDate)

#自定义事件接口(扩展自IEventSystemHandler)

#包含了Execute函数的静态容器类

#Input模块(可选项且扩展自BaseInputModule),并以此处理和执行事件

#实现了接口的类或GameObject




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值