在Editor下监听按键有以下几种方式:

1.自定义菜单栏功能:

比如F5键暂停编辑器

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine; public class CustomKeys
{
[MenuItem("Custom快捷键/暂停 _F5")]
static void EditorPauseCommand()
{
EditorApplication.isPaused = !EditorApplication.isPaused;
}
}

api参考:http://docs.unity3d.com/Documentation/ScriptReference/MenuItem.html

快速打开某个场景,并且运行游戏

using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine;
using UnityEngine.SceneManagement; public class CustomKeys
{
[MenuItem("Custom快捷键/快速 _F1")]
static void SpeedGameCommand()
{
if (EditorApplication.isPlaying)
{
EditorApplication.isPlaying = false;
}
else
{
EditorSceneManager.OpenScene("Assets/Scenes/LandInit.unity");
EditorApplication.isPlaying = true;
}
}
}

2.OnSceneGUI在GUI刷新中监听:

using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(MySpecialMonoBehaviour))]
public class MyCustomEditor : Editor {
void OnSceneGUI() {
Event e = Event.current;
if(EventType.KeyDown == e.type && KeyCode.RightControl == e.keyCode)
{
moveMulti = true;
}
if(EventType.KeyUp == e.type && KeyCode.RightControl == e.keyCode)
{
moveMulti = false;
}
}
}

3.onSceneGUIDelegate注册事件:

using UnityEditor;
using UnityEngine; [InitializeOnLoad]
public static class EditorHotkeysTracker
{
static EditorHotkeysTracker()
{
SceneView.onSceneGUIDelegate += view =>
{
var e = Event.current;
if (e != null && e.keyCode != KeyCode.None)
Debug.Log("Key pressed in editor: " + e.keyCode);
};
}
}

详见:http://answers.unity3d.com/questions/381630/listen-for-a-key-in-edit-mode.html

方式二跟三类似Update()函数,当按键按下时可能会被多次执行,且不方便同时监听多个按键,一般来说作为全局快捷键应该同时组合ctrl/shift/alt或别的按键,以防跟普通按键冲突。个人认为方式一是更加简单可靠。

UGUI在想要创建一个Image或者Text时需要从菜单栏中级级点击多次才行(若是创建空物体再添加组件的方式只会更麻烦),而且创建的控件还是位于最外层层级中而不是直接成为我当前选中的物体的子物体,每次都得手动拖到父物体之下。另外一种方式就是右键点击一个物体,重弹出菜单中创建,个人觉得这样子也挺麻烦。

NGUI则大部分的控件创建都有对应的快捷键,且直接将新生成的物体放置到当前选中的控件之下,十分高效快捷。

现通过前面介绍的方式一为UGUI的控件创建添加快捷键,在创建控件的时你还可以同时进行一些默认初始设置,如改变Text的字体为常用字体,设置其对齐方式颜色等等:

using UnityEngine;
using UnityEditor;
using UnityEngine.UI; //同时支持在选中物体上右键菜单创建和直接快捷键创建
public class UGUIHotKey
{
private static GameObject CheckSelection (MenuCommand menuCommand)
{
GameObject selectedObj = menuCommand.context as GameObject;
//若当前不是右键点击物体的操作则看当前选中的物体的情况
if (selectedObj == null)
selectedObj = Selection.activeGameObject;
//当前没有选中物体或者选中的物体不在Canvas之下则返回空,按键不响应。(当然也可以不要求存在Canvas,没有时则先创建一个新的Canvas)
if (selectedObj == null || selectedObj != null && selectedObj.GetComponentInParent<Canvas> () == null)
return null;
return selectedObj;
} [MenuItem ("GameObject/UGUI/Image #&i", false, 6)] //参数意义请查阅API文档,上文有链接,函数中的几个其他接口的调用的含义也有介绍
static void CreateImage (MenuCommand menuCommand)
{
GameObject selectedObj = CheckSelection (menuCommand);
if (selectedObj == null)
return;
GameObject go = new GameObject ("Image");
GameObjectUtility.SetParentAndAlign (go, selectedObj);
Undo.RegisterCreatedObjectUndo (go, "Create " + go.name);
Selection.activeObject = go;
go.AddComponent<Image> ();
} [MenuItem ("GameObject/UGUI/Text #&t", false, 6)]
static void CreateText (MenuCommand menuCommand)
{
GameObject selectedObj = CheckSelection (menuCommand);
if (selectedObj == null)
return;
GameObject go = new GameObject ("Text");
GameObjectUtility.SetParentAndAlign (go, selectedObj);
Undo.RegisterCreatedObjectUndo (go, "Create " + go.name);
Selection.activeObject = go; Text t = go.AddComponent<Text> ();
Font font = AssetDatabase.LoadAssetAtPath ("Assets/ArtSources/Font/xxxx.ttf", typeof (Font)) as Font;
t.font = font;
t.fontSize = 24;
t.alignment = TextAnchor.MiddleCenter;
t.color = Color.white;
t.text = "New Text";
t.rectTransform.sizeDelta = new Vector2 (150f, 30f);
}
}

unity自由自定义添加Editor快捷键的更多相关文章

  1. jQuery基础之(五)jQuery自定义添加"$"与解决"$"的冲突

    1.自定义添加$ 从上面四篇文章我们看到jQuery的强大,但无论如何,jQuery都不可能满足所有用户的需求,而且有一些需求十分小众,也不适合放到整个jQuery框架中,正是因为这一点,jQuery ...

  2. phpCMS V9 自定义添加 全局变量{SKIN_PATH}方法

    前言:目前v9版本新增{js_path},{css_path},{img_path}三个全局变量,代替2008版本中{skin_path},样式图片脚本分开路径,确实达到了一定在后台管理方便的目的,但 ...

  3. Unity脚本自动添加注释脚本及排版格式

    Unity脚本自动添加注释脚本及头部注释排版格式 公司开发项目,需要声明版权所有,,,,标注公司名,作者,时间,项目名称及描述等等. 自己总结实现的现成脚本及头部注释排版文本,添加到模版即可. 文件不 ...

  4. zabbix的自动发现、自定义添加监控项目、配置邮件告警

    1.zabbix的自动发现这里的自动发现,所显示出来的是规则的上自动了现 然后 可以对其内容进行相关的配制,如时间或周期 注意:对于单个主机的规则,可以自行添加或删除, 但对于已经添加好了的规则,若需 ...

  5. 超强PHP集成环境,支持800多个不同PHP版本同时运行,无限自定义添加mysql与php版本

    转载自今日头条 小编最近发现PHPWAMP竟然又更新了,激动之余向大家介绍一下新版的强大功能. PHPWAMP是纯绿色集成环境,高版本php无需安装VC运行库,默认已经集成VC运行库!Nginx支持服 ...

  6. Winform中自定义添加ZedGraph右键实现设置所有Y轴刻度的上下限

    场景 Winforn中实现ZedGraph自定义添加右键菜单项(附源码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/10 ...

  7. NX二次开发-自定义添加右键菜单RegisterConfigureContextMenuCallback

    首先声明这个知识我以前不知道,是夏天的时候看到别人在唐工的QQ群里问的,唐工说西门子官方有这个例子.那个时候我因为在忙其他事情,也就没去研究那个右键菜单到底是怎么做的.关于自定义添加右键菜单Regis ...

  8. [译]如何在Unity编辑器中添加你自己的工具

    在这篇教程中你会学习如何扩展你的Unity3D编辑器,以便在你的项目中更好的使用它.你将会学习如何绘制你自己的gizmo,用代码来实现创建和删除物体,创建编辑器窗口,使用组件,并且允许用户撤销他们所作 ...

  9. UEditor百度编辑器,工具栏上自定义添加一个普通按钮

    添加一个名叫“hougelou”的普通按钮在工具栏上: 第一步:找到ueditor.config.js文件中的toolbars数组,增加一个“hougelou”字符串,然后找到labelMap数组,对 ...

  10. UEditor百度编辑器,工具栏自定义添加一个普通按钮

    根据网上前辈提供的,还真的不错,下面也整理一下 添加一个名叫“macros”的普通按钮在工具栏上: 第一步:找到ueditor.config.js文件中的toolbars数组,增加一个“macros” ...

随机推荐

  1. 【记录】博客|Markdown写作常用的符号表示、公式写法合集

    文章目录 基础内容Basic 1.符号合集 2.LaTeX公式输入 附加内容Addition 1.公式左对齐 2.Markdown文档导出的PDF分页 基础内容Basic 1.符号合集 LATEX M ...

  2. k8s-v1.22.5部署文档(ubuntu1804)

    1,# 临时关闭sudo swapoff -a# 永久关闭sudo vi /etc/fstab## 第二行注释掉 (注释swap分区)# /dev/mapper/ubuntu--vg-swap_1 n ...

  3. Flex布局-容器项

    弹性盒子是一种用于 按行 或 按列的一维布局方法. 元素可以膨胀以填充额外的空间, 也可以 收缩 以适应更小的空间. flex 重点概览 对于 flex 重要的理解点在于: 主轴与交叉轴 换行与缩写 ...

  4. Excel 拼接为 SQL 并打包 exe

    关于 Excel 拼接 sql 这个操作, 我已经整过好几篇了, 当然在工作中也是蛮常用的, 今天主要是来写个终篇, 彻底结束它, 然后将代码进行打包为 exe 这样的桌面小软件, 除了自己用, 也可 ...

  5. ASP.NET Core Razor融合JS库Demo

    cshtml.cs using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; namespace Razor ...

  6. ASP.NET Core Web API中操作方法中的参数来源

    在ASP.NET Core Web API中,有多种方式可以传递参数给操作方法.以下是一些常见的参数传递方式: 路由参数(Route Parameters):参数值从URL的路由中提取. // Rou ...

  7. codeup之 查找学生信息

    Description 输入N个学生的信息,然后进行查询. Input 输入的第一行为N,即学生的个数(N<=1000) 接下来的N行包括N个学生的信息,信息格式如下: 01 李江 男 21 0 ...

  8. odoo16里面的常用方法

    一.全局搜索与显示 def name_get(self): res = [] for order in self: name = order.name if order.draw_number: na ...

  9. 面试题:HashMap和Hashtable的区别和联系

    摘要:从源码.特性和算法实现等几个角度归纳HashMap和Hashtable的区别和联系.   HashMap与Hashtable的区别是面试中经常遇到的一个问题.此问题看似简单,但如若深挖,也可以学 ...

  10. Ubuntu 通过 docker 部署禅道

    # 拉取镜像 docker pull easysoft/zentao:latest # 运行容器(简单配置) docker run --name zentao -p 8080:80 -e MYSQL_ ...