22.Event

  1. 22.Event
    1. 22.1 知识点
      1. 准备工作
      2. Event公共类是用来做什么的
      3. 重要API
      4. 更多内容
    2. 22.2 知识点代码
      1. Lesson22_Event
      2. MyEventLearnWindow

22.Event


22.1 知识点

准备工作

自定义一个编辑器拓展窗口用于Event知识学习

public class MyEventLearnWindow : EditorWindow
{
    [MenuItem("编辑器拓展教程/MyEventLearnWindow")]
    private static void OpenMyEventLearnWindow()
    {
        MyEventLearnWindow win = EditorWindow.GetWindow<MyEventLearnWindow>("Event学习窗口");
        win.Show();
    }

    private void OnGUI()
    {

    }
}

Event公共类是用来做什么的

它提供了许多属性和方法,允许你检查和处理用户输入,主要用于在Unity编辑器拓展开发中。因为Input相关内容需要在运行时才能监听输入,而Event专门提供给编辑模式下使用,可以帮助我们检测鼠标键盘输入等事件相关操作,在 OnGUI 和 OnSceneView 中都能使用。

重要API

private void OnGUI()
{
    // 获取当前事件
    Event eventCurrent = Event.current;

    // alt键是否按下
    if (eventCurrent.alt)
        Debug.Log("alt键按下了");

    // shift键是否按下
    if (eventCurrent.shift)
        Debug.Log("shift键按下了");

    // ctrl键是否按下
    if (eventCurrent.control)
        Debug.Log("control键按下了");

    // 是否是鼠标事件
    if (eventCurrent.isMouse)
    {
        Debug.Log("鼠标相关事件");

        // 判断鼠标左中右键
        Debug.Log(eventCurrent.button);

        // 鼠标位置
        Debug.Log("鼠标位置" + eventCurrent.mousePosition);
    }

    // 判断是否是键盘输入
    if (eventCurrent.isKey)
    {
        Debug.Log("键盘相关事件");

        // 获取键盘输入的字符
        Debug.Log(eventCurrent.character);

        // 获取键盘输入对应的KeyCode
        switch (eventCurrent.keyCode)
        {
            case KeyCode.Space:
                Debug.Log("空格键输入");
                break;
        }
    }

    // 判断输入类型
    // 一般会配合它 来判断 比如 键盘 鼠标的抬起按下相关的操作

    // 是否锁定大写 对应键盘上caps键是否开启
    if (eventCurrent.capsLock)
        Debug.Log("大小写锁定开启");
    else
        Debug.Log("大小写锁定关闭");

    // Windows键或Command键是否按下
    if (eventCurrent.command)
        Debug.Log("PC win键按下 或 Mac Command键按下");

    // 键盘事件 字符串
    // 可以用来判断是否触发了对应的键盘事件
    if (eventCurrent.commandName == "Copy")
    {
        Debug.Log("按下了ctrl + c");
    }

    if (eventCurrent.commandName == "Paste")
    {
        Debug.Log("按下了ctrl + v");
    }

    if (eventCurrent.commandName == "Cut")
    {
        Debug.Log("按下了ctrl + x");
    }

    // 鼠标间隔移动距离
    //Debug.Log(eve.delta);

    // 是否是功能键输入
    // 功能键指小键盘中的 方向键, page up, page down, backspace等等
    if (eventCurrent.functionKey)
        Debug.Log("有功能按键输入");

    // 小键盘是否开启
    if (eventCurrent.numeric)
        Debug.Log("小键盘是否开启");

    // 避免组合键冲突
    // 在处理完对应输入事件后,调用该方法,可以阻止事件继续派发,放置和Unity其他编辑器事件逻辑冲突
    eventCurrent.Use();
}

更多内容

官方文档 Event


22.2 知识点代码

Lesson22_Event

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson22_Event : MonoBehaviour
{
    void Start()
    {
        #region 准备工作

        //自定义一个编辑器拓展窗口用于Event知识学习

        #endregion

        #region 知识点一 Event公共类是用来做什么的?

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

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

        #endregion

        #region 知识点二 重要API

        //1.获取当前输入事件
        //  Event.current

        //2.alt键是否按下
        //  Event.current.alt

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

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

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

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

        //7.鼠标位置
        //  Event.curretn.mousePosition

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

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

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

        //11.判断输入类型
        //  Event.current.type
        //  EventType枚举和它比较即可
        //  EventType中有常用的 鼠标按下抬起拖拽,键盘按下抬起等等类型

        //12.是否锁定大写 对应键盘上caps键是否开启
        //  Event.current.capsLock

        //13.Windows键或Command键是否按下
        //  Event.current.command

        //14.键盘事件 字符串
        //  Event.current.commandName
        //  可以用来判断是否触发了对应的键盘事件
        //  返回值:
        //  Copy:拷贝
        //  Paste:粘贴
        //  Cut:剪切

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

        //16.是否是功能键输入
        //  Event.current.functionKey
        //  功能键指小键盘中的 方向键, page up, page down, backspace等等

        //17.小键盘是否开启
        //  Event.current.numeric

        //18.避免组合键冲突
        //  Event.current.Use()
        //  在处理完对应输入事件后,调用该方法,可以阻止事件继续派发,放置和Unity其他编辑器事件逻辑冲突

        #endregion

        #region 知识点三 更多内容

        //官方文档 https://docs.unity3d.com/ScriptReference/Event.html

        #endregion
    }
}

MyEventLearnWindow

using System;
using UnityEditor;
using UnityEngine;

public class MyEventLearnWindow : EditorWindow
{
    [MenuItem("编辑器拓展教程/MyEventLearnWindow")]
    private static void OpenMyEventLearnWindow()
    {
        MyEventLearnWindow win = EditorWindow.GetWindow<MyEventLearnWindow>("Event学习窗口");
        win.Show();
    }

    private void OnGUI()
    {
        //1.获取当前事件
        //  Event.current
        Event eventCurrent = Event.current;

        //2.alt键是否按下
        //  Event.current.alt
        if (eventCurrent.alt)
            Debug.Log("alt键按下了");

        //3.shift键是否按下
        //  Event.current.shift
        if (eventCurrent.shift)
            Debug.Log("shift键按下了");

        //4.ctrl键是否按下
        //  Event.current.control
        if (eventCurrent.control)
            Debug.Log("control键按下了");

        //5.是否是鼠标事件
        //  Event.current.isMouse
        if (eventCurrent.isMouse)
        {
            Debug.Log("鼠标相关事件");
            
            //6.判断鼠标左中右键
            //  Event.current.button (0,1,2 分别代表 左,右,中 如果大于2可能是其他鼠标按键)
            Debug.Log(eventCurrent.button);
            
            //7.鼠标位置
            //  Event.current.mousePosition
            Debug.Log("鼠标位置" + eventCurrent.mousePosition);
        }

        //8.判断是否是键盘输入
        //  Event.current.isKey
        if (eventCurrent.isKey)
        {
            Debug.Log("键盘相关事件");
            
            //9.获取键盘输入的字符
            //  Event.current.character
            Debug.Log(eventCurrent.character);
            
            //10.获取键盘输入对应的KeyCode
            //  Event.current.keyCode
            //Debug.Log(eve.keyCode);
            switch (eventCurrent.keyCode)
            {
                case KeyCode.Space:
                    Debug.Log("空格键输入");
                    break;
            } 
        }

        //11.判断输入类型
        //  Event.current.type
        //  EventType枚举和它比较即可
        //  EventType中有常用的 鼠标按下抬起拖拽,键盘按下抬起等等类型
        //  一般会配合它 来判断 比如 键盘 鼠标的抬起按下相关的操作

        //12.是否锁定大写 对应键盘上caps键是否开启
        //  Event.current.capsLock
        if (eventCurrent.capsLock)
            Debug.Log("大小写锁定开启");
        else
            Debug.Log("大小写锁定关闭");

        //13.Windows键或Command键是否按下
        //  Event.current.command
        if (eventCurrent.command)
            Debug.Log("PC win键按下 或 Mac Command键按下");

        //14.键盘事件 字符串
        //  Event.current.commandName
        //  可以用来判断是否触发了对应的键盘事件
        //  返回值:
        //  Copy:拷贝
        //  Paste:粘贴
        //  Cut:剪切
        if (eventCurrent.commandName == "Copy")
        {
            Debug.Log("按下了ctrl + c");
        }

        if (eventCurrent.commandName == "Paste")
        {
            Debug.Log("按下了ctrl + v");
        }

        if (eventCurrent.commandName == "Cut")
        {
            Debug.Log("按下了ctrl + x");
        }

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

        //Debug.Log(eve.delta);

        //16.是否是功能键输入
        //  Event.current.functionKey
        //  功能键指小键盘中的 方向键, page up, page down, backspace等等
        if (eventCurrent.functionKey)
            Debug.Log("有功能按键输入");

        //17.小键盘是否开启
        //  Event.current.numeric
        if (eventCurrent.numeric)
            Debug.Log("小键盘是否开启");

        //18.避免组合键冲突
        //  Event.current.Use()
        //  在处理完对应输入事件后,调用该方法,可以阻止事件继续派发,放置和Unity其他编辑器事件逻辑冲突
        eventCurrent.Use();
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏