UG3L1-4——Event System 和 Standalone Input Module

EventSystem和Standalone Input Module组件
他们主要是用于输入事件监听管理和分发的
如果没有了他们
那么UI中的所有输入事件将不会被响应
他们的参数相关了解即可,一般情况下不会去修改

本章代码关键字

1
EventSystem.current.IsPointerOverGameObject()    //获取本帧输入是否点击到了UI控件

Event System

Event System意思是事件系统
它是用于管理玩家的输入事件并分发给各UI控件
它是事件逻辑处理模块
所有的UI事件都通过EventSystem组件中轮询检测并做相应的执行
它类似一个中转站,和许多模块一起共同协作
如果没有它,所有点击、拖曳等等行为都不会被响应

Event System 参数相关

image

  • First Selected:首先选择的游戏对象,可以设置游戏一开始的默认选择
  • Send Navigation Events:是否允许导航事件(移动/按下/取消)
  • Drag Threshold:拖拽操作的阈值(移动多少像素算拖拽)

Standalone Input Module

Standalone Input Module意思是 独立输入模块
它主要针对 处理鼠标/键盘/控制器/触屏(新版Unity)的输入
输入的事件通过EventSystem进行分发
它依赖于EventSystem组件,他们两缺一不可

Standalone Input Module 参数

image

  • Horizontal Axis:水平轴按钮对应的热键名
    (该名字对应Input管理器)
  • Vertical Axis:垂直轴按钮对应的热键名
    (该名字对应Input管理器)
  • Submit Button:提交(确定)按钮对应的热建名
    (该名字对应Input管理器)
  • Cancel Button:取消按钮对应的热建名
    (该名字对应Input管理器)
  • Input Actions Per Second:每秒允许键盘/控制器输入的数量
  • Repeat Delay:每秒输入操作重复率生效前的延迟时间
  • ForceModule Active:是否强制模块处于激活状态

注:如果使用了新输入系统 Input System,Standalone Input Module会提示你切换为新的 Input System UI Input Module
并将且该新的Input System UI Input Module可以关联到 Player Input 上

image

补充:点击UI控件时不响应Input输入逻辑

假设这样一个情况,Input​ 会监听鼠标左键,会让角色发射子弹,
但鼠标左键点击到UI按钮时,我们希望角色不发射子弹,也就是不响应 Input​ 的输入逻辑
这时我们可以使用 EventSystem.current.IsPointerOverGameObject()​ 来获取这次是否点击到了UI按钮,
若点击到了,就提前结束 Input​ 输入逻辑

1
2
3
4
5
6
7
8
9
10
11
void Update()
{
if (EventSystem.current.IsPointerOverGameObject())
return;

if (Input.GetMouseButtonDown(0))
{
//输入逻辑
print(1);
}
}

当点击屏幕上的UI控件时,将不会输出1