UEDL6——Event公共类

本章代码关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Event.current                    //获取当前事件
Event.current.alt //判断alt键是否按下
Event.current.shift //shift键是否按下
Event.current.control //ctrl键是否按下
Event.current.isMouse //是否是鼠标事件
Event.current.button //判断鼠标左中右键,0,1,2 分别代表 左,右,中
Event.current.mousePosition //鼠标相对于窗口坐标系的位置
Event.current.isKey //判断是否是键盘输入
Event.current.character //获取键盘输入的字符
Event.current.keyCode //获取键盘输入对应的KeyCode
Event.current.type //判断输入类型
EventType //表示Event的类型
Event.current.capsLock //是否锁定大写 对应键盘上capslock键是否开启
Event.current.command //Windows键或Command键(苹果使用)是否按下
Event.current.commandName //键盘事件 返回的是字符串 可以用来判断是否触发了对应的键盘事件
Event.current.delta //鼠标间隔移动距离
Event.current.functionKey //是否是功能键输入
Event.current.numeric //小键盘是否开启
Event.current.Use() //避免组合键冲突,在处理完对应输入事件后,调用该方法,可以阻止事件继续派发,防止和Unity其他编辑器事件逻辑冲突

Event

Event​公共类提供了许多属性和方法,允许你检查和处理用户输入,主要用于在Unity编辑器拓展开发中

因为Input​相关内容需要在运行时才能监听输入,而Event​专门提供给编辑模式下使用,可以帮助我们检测鼠标键盘输入等事件相关操作
它在 OnGUI​ 和 OnSceneView​ 中都能使用

Event的具体内容参见:

重要API

注意:以下的API全部都是焦点在窗口上时才会触发

  1. 获取当前事件 Event.current

    1
    Event eve = Event.current;
  2. alt键是否按下 Event.current.alt

    1
    2
    if (Event.current.alt)
    Debug.Log("alt键按下了!");

    image

  3. shift键是否按下 Event.current.shift

    1
    2
    if (Event.current.shift)
    Debug.Log("shift键按下了!");

    image

  4. ctrl键是否按下 Event.current.control

    1
    2
    if (Event.current.control)
    Debug.Log("ctrl键按下了!");

    image

  5. 是否是鼠标事件 Event.current.isMouse

    1
    2
    if (Event.current.isMouse)
    Debug.Log("鼠标相关事件");

    按下鼠标上的左键中键右键就会输出该消息

    image

  6. 判断鼠标左中右键 Evnet.current.button​ (0,1,2 分别代表 左,右,中 如果大于2可能是其他鼠标按键)

    1
    2
    3
    4
    5
    if (Event.current.isMouse)
    {
    Debug.Log("鼠标相关事件");
    Debug.Log(Event.current.button);
    }

    依次按下左键,中键,右键输出的内容

    image

  7. 鼠标位置 Event.current.mousePosition​,输出鼠标相对于窗口坐标系位置的Vector2值

    1
    2
    3
    4
    5
    6
    if (Event.current.isMouse)
    {
    Debug.Log("鼠标相关事件");
    Debug.Log(Event.current.button);
    Debug.Log("鼠标位置: " + Event.current.mousePosition);
    }

    焦点在窗口上时,按下鼠标键拖动鼠标

    image

  8. 判断是否是键盘输入 Event.current.isKey

    1
    2
    3
    4
    if (Event.current.isKey)
    {
    Debug.Log("键盘相关事件");
    }

    image

  9. 获取键盘输入的字符 Event.current.character

    输出的是输入的字符char​,输出结果收到是否按下Shift键影响,按下shift键会输出大写字母

    1
    2
    3
    4
    5
    if (Event.current.isKey)
    {
    Debug.Log("键盘相关事件");
    Debug.Log("Character: " + Event.current.character);
    }

    image

  10. 获取键盘输入对应的KeyCode​:Event.current.keyCode

    输出的是KeyCode​枚举,输出结果不受大小写影响

    1
    2
    3
    4
    5
    if (Event.current.isKey)
    {
    Debug.Log("键盘相关事件");
    Debug.Log("KeyCode: " + Event.current.keyCode);
    }

    image

  11. 判断输入类型 Event.current.type

    EventType​ 枚举和它比较即可,EventType​中有常用的鼠标按下抬起拖拽,键盘按下抬起等等类型,
    一般会配合它来判断如鼠标键盘的抬起或者按下,具体有哪些事件可看:EventType​

    1
    2
    3
    4
    if (Event.current.type == EventType.MouseDown)
    {
    Debug.Log("鼠标按下");
    }
  12. 是否锁定大写 对应键盘上capslock键是否开启 Event.current.capsLock

    1
    2
    3
    4
    5
    if (Event.current.capsLock)
    Debug.Log("大小写锁定开启");
    else
    Debug.Log("大小写锁定关闭");

    image

  13. Windows键或Command键(苹果使用)是否按下 Event.current.command

    1
    2
    if (Event.current.command)
    Debug.Log("Windows win键按下 或 Mac Command键按下");
  14. 键盘事件 返回的是字符串 Event.current.commandName​ 可以用来判断是否触发了对应的键盘事件

    特定返回值代表特定事件,我们之前学习的窗口事件传递也使用了该方法,只是方法名是我们自定义的

    • Copy​:拷贝

      1
      2
      if (Event.current.commandName == "Copy")
      Debug.Log("按下了ctrl + c");
    • Paste​:粘贴

      1
      2
      if (Event.current.commandName == "Paste")
      Debug.Log("按下了ctrl + v");
    • Cut​:剪切

      1
      2
      if (Event.current.commandName == "Cut")
      Debug.Log("按下了ctrl + x");

    image

  15. 鼠标间隔移动距离 Event.current.delta

    在按下鼠标的键时才会输出移动距离

    1
    Debug.Log(Event.current.delta);
  16. 是否是功能键输入 Event.current.functionKey

    功能键指小键盘中的 方向键, page up, page down, backspace等等

    1
    2
    if (Event.current.functionKey)
    Debug.Log("功能键按下了");

    image

  17. 小键盘是否开启(笔者未能触发,原因不明) Event.current.numeric

    1
    2
    if (Event.current.numeric)
    Debug.Log("数字小键盘开启");
  18. 避免组合键冲突 Event.current.Use()

    在处理完对应输入事件后,调用该方法,可以阻止事件继续派发,防止和Unity其他编辑器事件逻辑冲突

    1
    Event.current.Use();

EventType

EventType是枚举,表示Event​的类型,详细请见:EventType - Unity 脚本 API

枚举字段 作用
MouseDown 按下了鼠标键。
MouseUp 释放了鼠标键。
MouseMove 移动了鼠标(仅限 Editor 视图)。
MouseDrag 拖动了鼠标。
KeyDown 按下了一个键盘键。
KeyUp 释放了一个键盘键。
ScrollWheel 移动了滚轮。
Repaint 重绘事件。每一帧都发送一个。
Layout 布局事件。
DragUpdated 仅限 Editor:拖放操作已更新。
DragPerform 仅限 Editor:拖放操作已执行。
DragExited 仅限 Editor:拖放操作已退出。
Ignore 应忽略 Event。
Used 已经处理了事件。
ValidateCommand 验证特殊命令(例如复制和粘贴)。
ExecuteCommand 执行特殊命令(例如复制和粘贴)。
ContextClick 用户已点击了右键(或者在 Mac 上点击了 Control)。
MouseEnterWindow 鼠标进入了某个窗口(仅限 Editor 视图)。
MouseLeaveWindow 鼠标离开了某个窗口(仅限 Editor 视图)。
TouchDown 直接操作设备(手指、笔)触屏。
TouchUp 直接操作设备(手指、笔)离开屏幕。
TouchMove 直接操作设备(手指、笔)在屏幕上移动(拖动)。
TouchEnter 直接操作设备(手指、笔)移动到窗口中(拖动)。
TouchLeave 直接操作设备(手指、笔)移出窗口(拖动)。
TouchStationary 直接操作设备(手指、笔)静止事件(长时间触地)。