注意:考虑到编辑器扩展的内容比较多,我将编辑器扩展的内容分开,并全部整合放在【unity游戏开发——编辑器扩展】专栏里,感兴趣的小伙伴可以前往逐一查看学习。

前言

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

官方文档:Event 事件

示例

这里就不多介绍了,代码里都有详细的注释,大家对照着查看效果就行了。

using UnityEditor;
using UnityEngine;

public class EditorEventWindow : EditorWindow
{

    [MenuItem("编辑器拓展/自定义窗口拓展/Event自定义窗口")]
    private static void OpenEditorGUIUtilityWindow()
    {
        EditorEventWindow win = EditorWindow.GetWindow<EditorEventWindow>("Event知识面板");
        win.Show();
    }

    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);

            // 判断输入类型 - 鼠标相关
            switch (eventCurrent.type)
            {
                case EventType.MouseDown:
                    Debug.Log("鼠标按下");
                    break;
                case EventType.MouseUp:
                    Debug.Log("鼠标抬起");
                    break;
                case EventType.MouseDrag:
                    Debug.Log("鼠标拖动");
                    break;
                case EventType.MouseMove:
                    Debug.Log("鼠标移动");
                    break;
                case EventType.ContextClick:
                    Debug.Log("右键点击");
                    break;
            }
        }

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

            // 获取键盘输入的字符,获取不了一些特殊按键:比如空格、回车、上下左右等
            Debug.Log(eventCurrent.character);

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

            // 判断输入类型 - 键盘相关
            switch (eventCurrent.type)
            {
                case EventType.KeyDown:
                    Debug.Log("键盘按下");
                    break;
                case EventType.KeyUp:
                    Debug.Log("键盘抬起");
                    break;
            }
        }

        // 判断是否是滚轮事件
        if (eventCurrent.type == EventType.ScrollWheel)
        {
            Debug.Log("滚轮滚动: " + eventCurrent.delta);
        }

        // 判断是否是拖拽操作
        if (eventCurrent.type == EventType.DragUpdated || 
            eventCurrent.type == EventType.DragPerform ||
            eventCurrent.type == EventType.DragExited)
        {
            Debug.Log("拖拽操作: " + eventCurrent.type);
        }

        // 是否锁定大写 对应键盘上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("鼠标间隔移动距离:" + eventCurrent.delta);

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

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

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

效果
在这里插入图片描述


专栏推荐

地址
【unity游戏开发入门到精通——C#篇】
【unity游戏开发入门到精通——unity通用篇】
【unity游戏开发入门到精通——unity3D篇】
【unity游戏开发入门到精通——unity2D篇】
【unity实战】
【制作100个Unity游戏】
【推荐100个unity插件】
【实现100个unity特效】
【unity框架/工具集开发】
【unity游戏开发——模型篇】
【unity游戏开发——InputSystem】
【unity游戏开发——Animator动画】
【unity游戏开发——UGUI】
【unity游戏开发——联网篇】
【unity游戏开发——优化篇】
【unity游戏开发——shader篇】
【unity游戏开发——编辑器扩展】

完结

好了,我是向宇,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
在这里插入图片描述

Logo

分享前沿Unity技术干货和开发经验,精彩的Unity活动和社区相关信息

更多推荐