一. 事件系统概述
Unity的事件系统具有通过鼠标、键盘、游戏控制柄、触摸操作等输入方式,将事件发送给对象的功能。事件系统通过场景中EventSystem对象的组件EventSystem和Standalone Input Module发挥功能。EventSystem对象通常实在创建画布的同时被创建的,通常附加了EventSystem组件的对象,一个场景中只能存在一个。
二. Event System组件
2.1 Event System组件概述
事件系统和核心功能是当发生了输入事件后,判断事件类型并把输入事件发送给应该收到事件的对象,对象的事件处理函数被调用。
输入模块组件Standalone Input Module组件和Touch Input Module(已不推荐使用,后文忽略此组件)用来确定事件类型和触发处理函数
射线投射组件来确定收到事件的对象(UGUI中射线组件在画布对象上,本文不作详细介绍)
Event System组件负责管理输入组件,因此Event System和Standalone Input Module组件附加到同一个对象后才能发挥作用,缺少两者中任意组件会导致事件系统失效。
当 EventSystem 启动时,它会搜索附加到同一 GameObject 的任何 BaseInputModule, 并将其添加到内部列表中。在更新时,每个附加模块都会收到 一个 UpdateModules 调用,模块可以在其中修改内部状态。所有模块更新完成后, 活动模块将执行 Process 调用。 此时可以进行自定义模块处理。
2.2 成员
API使用示例:判断是否有任意UI对象被点击
void Update()
{
// Check if the left mouse button was clicked
if (Input.GetMouseButtonDown(0))
{
// Check if the mouse was clicked over a UI element
if (EventSystem.current.IsPointerOverGameObject())
{
Debug.Log("Clicked on the UI");
}
}
}
2.3 编辑器属性
三.Standalone Input Module组件
如前文所述Standalone Input Module组件用来确定事件类型和触发处理函数
3.1 编辑器属性
在Inspector视图上,它的前4个属性是用来设置移动、提交和取消按钮的,组件会在这些按钮触发时将事件发送给选中的对象。这里的值要设置为Input Manager(Edit->Project Setting->Input Manager)面板中已有的值。
3.2 事件响应方式
方式1:实现IXXHandler接口,脚本挂在要点击的目标对象上面
public class onBtnClick : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
public void OnPointerDown(PointerEventData eventData) {
print("calling OnPointerClick");
}
public void OnPointerUp(PointerEventData eventData) {
print("calling OnPointerClick");
}
}
方式2:使用EventTrigger组件
传送门:UGUI组件EventTrigger用法_ellis1970的博客-CSDN博客
3.3 事件类型