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

  1. 自定义菜单栏功能:

    1. using UnityEngine;
    2. using UnityEditor;
    3. public static class MyMenuCommands {
    4. [MenuItem("My Commands/First Command _p")]
    5. static void FirstCommand() {
    6. Debug.Log("You used the shortcut P");
    7. }
    8. [MenuItem("My Commands/Special Command %g")]
    9. static void SpecialCommand() {
    10. Debug.Log("You used the shortcut Cmd+G (Mac) Ctrl+G (Win)");
    11. }
    12. }

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

  2. OnSceneGUI在GUI刷新中监听:
    1. using UnityEngine;
    2. using UnityEditor;
    3. [CustomEditor(typeof(MySpecialMonoBehaviour))]
    4. public class MyCustomEditor : Editor {
    5. void OnSceneGUI() {
    6. Event e = Event.current;
    7. if(EventType.KeyDown == e.type && KeyCode.RightControl == e.keyCode)
    8. {
    9. moveMulti = true;
    10. }
    11. if(EventType.KeyUp == e.type && KeyCode.RightControl == e.keyCode)
    12. {
    13. moveMulti = false;
    14. }
    15. }
    16. }
  3. onSceneGUIDelegate注册事件:
    1. using UnityEditor;
    2. using UnityEngine;
    3.  
    4. [InitializeOnLoad]
    5. public static class EditorHotkeysTracker
    6. {
    7. static EditorHotkeysTracker()
    8. {
    9. SceneView.onSceneGUIDelegate += view =>
    10. {
    11. var e = Event.current;
    12. if (e != null && e.keyCode != KeyCode.None)
    13. Debug.Log("Key pressed in editor: " + e.keyCode);
    14. };
    15. }
    16. }

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

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

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

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

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

  1. using UnityEngine;
  2. using UnityEditor;
  3. using UnityEngine.UI;
  4.  
  5. //同时支持在选中物体上右键菜单创建和直接快捷键创建
  6. public class UGUIHotKey
  7. {
  8. private static GameObject CheckSelection (MenuCommand menuCommand)
  9. {
  10. GameObject selectedObj = menuCommand.context as GameObject;
  11. //若当前不是右键点击物体的操作则看当前选中的物体的情况
  12. if (selectedObj == null)
  13. selectedObj = Selection.activeGameObject;
  14. //当前没有选中物体或者选中的物体不在Canvas之下则返回空,按键不响应。(当然也可以不要求存在Canvas,没有时则先创建一个新的Canvas)
  15. if (selectedObj == null || selectedObj != null && selectedObj.GetComponentInParent<Canvas> () == null)
  16. return null;
  17. return selectedObj;
  18. }
  19.  
  20. [MenuItem ("GameObject/UGUI/Image #&i", false, )] //参数意义请查阅API文档,上文有链接,函数中的几个其他接口的调用的含义也有介绍
  21. static void CreateImage (MenuCommand menuCommand)
  22. {
  23. GameObject selectedObj = CheckSelection (menuCommand);
  24. if (selectedObj == null)
  25. return;
  26. GameObject go = new GameObject ("Image");
  27. GameObjectUtility.SetParentAndAlign (go, selectedObj);
  28. Undo.RegisterCreatedObjectUndo (go, "Create " + go.name);
  29. Selection.activeObject = go;
  30. go.AddComponent<Image> ();
  31. }
  32.  
  33. [MenuItem ("GameObject/UGUI/Text #&t", false, )]
  34. static void CreateText (MenuCommand menuCommand)
  35. {
  36. GameObject selectedObj = CheckSelection (menuCommand);
  37. if (selectedObj == null)
  38. return;
  39. GameObject go = new GameObject ("Text");
  40. GameObjectUtility.SetParentAndAlign (go, selectedObj);
  41. Undo.RegisterCreatedObjectUndo (go, "Create " + go.name);
  42. Selection.activeObject = go;
  43.  
  44. Text t = go.AddComponent<Text> ();
  45. Font font = AssetDatabase.LoadAssetAtPath ("Assets/ArtSources/Font/xxxx.ttf", typeof (Font)) as Font;
  46. t.font = font;
  47. t.fontSize = ;
  48. t.alignment = TextAnchor.MiddleCenter;
  49. t.color = Color.white;
  50. t.text = "New Text";
  51. t.rectTransform.sizeDelta = new Vector2 (150f, 30f);
  52. }
  53. }

Unity添加自定义快捷键——UGUI快捷键的更多相关文章

  1. Unity 3D的常用快捷键

    Unity中的常用快捷键 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Windows系统Unity3 ...

  2. 在Unity中使用UGUI修改Mesh绘制几何图形

    在商店看到这样一个例子,表示很有兴趣,他们说是用UGUI做的.我想,像这种可以随便变形的图形,我第一个就想到了网格变形. 做法1: 细心的朋友应该会发现,每个UGUI可见元素,都有一个‘Canvas ...

  3. visual studio 2013常用快捷键 VS2013快捷键大全

    visual studio 2013常用快捷键 VS2013快捷键大全   Visual Studio 2013 是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具 ...

  4. 关于Unity中的UGUI优化,你可能遇到这些问题

    https://blog.uwa4d.com/archives/QA_UGUI-1.html 关于Unity中的UGUI优化,你可能遇到这些问题 作者:admin / 时间:2016年11月08日 / ...

  5. Java开发中的eclispe常用快捷键&全部快捷键

    Java开发中的eclispe常用快捷键&全部快捷键 Ctrl+1 快速修复(经典快捷键)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ ...

  6. UGUI 快捷键创建UGUI组件

      使用NGUI的时候还有xxx快捷键创建, spirte,label,button等等. 在UGUI里面的时候好像是没有快捷键的. 不知道以后多久才能有这个功能.  在家里闲无聊的时候写了一个脚本, ...

  7. Android Studio一些常用快捷键及快捷键冲突解决

    1. 最近在自学Android,也是边看书边写一些Demo,由于知识点越来越多,脑子越来越记不清楚,所以打算写成读书笔记,供以后查看,也算是把自己学到所理解的东西写出来,献丑,如有不对的地方,希望大家 ...

  8. Unity关于一个UGUI优化效率的方法

    无意间发现了一个小技巧.如下图所示,可以发现UGUI的Image组件的RaycastTarget勾选以后会消耗一些效率,为了节省效率就不要勾选它了,不仅Image组件Text组件也有这样的问题. 一般 ...

  9. Mac快捷键 Xcode快捷键

    Mac OSX 快捷键&命令行   一.Mac OSX 快捷键 ctrl+shift                                    快速放大dock的图标会暂时放大,而 ...

随机推荐

  1. 第五章 python中的异常处理

    每种编程语言都会有自己的异常处理机制,虽然各有特色,但基本上都差不多,那么python中强大异常处理机制是什么样的呢? 一.异常: python用异常对象来表示异常情况,遇到错误后,会引发异常.如果异 ...

  2. OJ的runtime error exit code对应SIGTERM代码

    Signal Name Number Description SIGHUP 1 Hangup (POSIX) SIGINT 2 Terminal interrupt (ANSI) SIGQUIT 3 ...

  3. nginx 搭建虚拟主机

    一.排错三部曲 第一步在客户端上ping服务端ip  ping 10.0.0.8 第二部在客户端上telnet服务器端IP.端口  telnet 10.0.0.8 第三部在客户端使用wget命令检测 ...

  4. NFS指定端口,NFS缓存

    nfs服务端: #编辑/etc/nfsmount.conf,在末尾添加: #RQUOTAD_PORT=30001#LOCKD_TCPPORT=30002#LOCKD_UDPPORT=30002#MOU ...

  5. 二分 连续上升子序列变形 UVA1471

    最大上升子序列解法: 1.动规转移方程 2.(nlogn) #include<cstdio> #include<algorithm> using namespace std; ...

  6. 手撸IoC

    Ioc的实现 可以把IoC模式看作是工厂模式的升华,可以把IoC看作一个大工厂,只不过这个大工厂里要生成的对象都是XML文件中给出定义的,然后利用Java的反射变成,根据XML中给出的类名生成相应的对 ...

  7. linux ps aux 结果解释

    # ps aux | moreUSER       PID  %CPU   %MEM   VSZ    RSS    TTY                   STAT       START    ...

  8. php获取图片的拍摄及其他数据信息

    服务器配置说明:1.在php.ini文件中找到;extension=php_exif.dll,去掉前面的分号2.在php.ini文件中找到;extension=php_mbstring.dll,去掉前 ...

  9. R数据类型

    2.2.1 向量向量是用于存储数值型.字符型或逻辑型数据的一维数组.执行组合功能的函数c()可用来创建向量.各类向量如下例所示: a <-c(1, 2, 5, 3, 6, -2, 4) b &l ...

  10. thinkphp微信开发(消息加密解密)

    使用thinkphp官方的WeChat包,使用不同模式可以成功,但是安全模式就是不行,现将分析解决结果做下记录. 分析问题: 解密微信服务器消息老是不成功,下载下微信公众平台官方给出的解密文件和Wec ...