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

  1. 自定义菜单栏功能:

     using UnityEngine;
    using UnityEditor;
    public static class MyMenuCommands {
    [MenuItem("My Commands/First Command _p")]
    static void FirstCommand() {
    Debug.Log("You used the shortcut P");
    }
    [MenuItem("My Commands/Special Command %g")]
    static void SpecialCommand() {
    Debug.Log("You used the shortcut Cmd+G (Mac) Ctrl+G (Win)");
    }
    }

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

  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, )] //参数意义请查阅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, )]
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 = ;
t.alignment = TextAnchor.MiddleCenter;
t.color = Color.white;
t.text = "New Text";
t.rectTransform.sizeDelta = new Vector2 (150f, 30f);
}
}

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. MVC中不能使用ViewBag

    在工程文件中添加 <Reference Include="Microsoft.CSharp" /> <Reference Include="System ...

  2. Data Structure Array: Find if there is a subarray with 0 sum

    http://www.geeksforgeeks.org/find-if-there-is-a-subarray-with-0-sum/ #include <iostream> #incl ...

  3. flex TweenLite

    本贴已在 AS天地会转发,大家可以参考:http://bbs.actionscript3.cn/viewthread.php?tid=11090&pid=91142&page=1&am ...

  4. 系统安装记录 install OS

    上个系统很乱,基本系统是lfs7.7,上面应用都是基于lfs7.9,基本系统是才接触lfs时搭建的,打包保存后一直没怎么使用过,到lfs7.10快出来的时候有段时间有空就拿出来跑了一下,安装了一些软件 ...

  5. Hadoop 运行jar包时 java.lang.ClassNotFoundException: Class com.zhen.mr.RunJob$HotMapper not found

    错误如下 Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class com.zhen.mr.RunJob$H ...

  6. 再次理解WCF以及其通信(附加一個編程小經驗)

    一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...

  7. 2018.5.8 Project review

    1 .product introduced A. Function requirement (customer) The product function is control the 1KW and ...

  8. 数据库连接池(connection pool)

    1.JDBC数据库连接池的必要性  在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: –      在主程序(如servlet.beans)中建立数据库连接. –      进行sql ...

  9. Gym - 100801D:Distribution in Metagonia (数学)

    题意:给定一个N,让你把它拆成若干个只含素因子2和3的数之和,且两两之间没有倍数关系,比如10=4+6. 思路:即是2因子的幂递增,3因子的幂递减:或者反之. 对于当前N,我们拆分出的数为num=2^ ...

  10. ACM学习历程—UESTC 1217 The Battle of Chibi(递推 && 树状数组)(2015CCPC C)

    题目链接:http://acm.uestc.edu.cn/#/problem/show/1217 题目大意就是求一个序列里面长度为m的递增子序列的个数. 首先可以列出一个递推式p(len, i) =  ...