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 直接操作设备(手指、笔)静止事件(长时间触地)。