Editorでキーを監視する方法はいくつかあります。
1.メニューバー機能をカスタマイズします。
たとえば、F5キーはエディターを一時停止します
System.Collections を使用します。 System.Collections.Generic; を使用します。 UnityEditor を使用します。 UnityEngine を使用します。 public class CustomKeys { [MenuItem(" Custom快捷键/暂停_F5 " )] static void EditorPauseCommand() { EditorApplication.isPaused =!EditorApplication.isPaused; } }
APIリファレンス:http : //docs.unity3d.com/Documentation/ScriptReference/MenuItem.html
2. GUI更新時のOnSceneGUIモニター:
UnityEngine を使用します。 UnityEditor を使用します。 [CustomEditor(typeof (MySpecialMonoBehaviour))] パブリック クラス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登録イベント:
UnityEditor を使用します。 UnityEngine を使用します。 [InitializeOnLoad] public static class EditorHotkeysTracker { static EditorHotkeysTracker() { SceneView.onSceneGUIDelegate + = view => { var e = Event.current; if(e!= null && e.keyCode!= KeyCode.None) Debug.Log(" エディターで押されたキー:" + e.keyCode); }; } }
参照:http://answers.unity3d.com/questions/381630/listen-for-a-key-in-edit-mode.html
2番目と3番目の方法はUpdate()関数に似ています。ボタンを押すと、ボタンが複数回実行される可能性があり、同時に複数のボタンを監視するのは不便です。一般的に、グローバルショートカットキーとして、Ctrl / Shift / Altまたは他のボタンを同時に組み合わせる必要があります。通常のキーとの競合を防ぐため。個人的には、最初の方法がよりシンプルで信頼できると思います。
画像またはテキストを作成する場合、UGUIはメニューバーレベルから複数回クリックする必要があり(空のオブジェクトを作成してコンポーネントを追加する場合、問題が増えるだけです)、作成されたコントロールは依然として最外部レベルにあります。これは、現在選択されているオブジェクトの子オブジェクトに直接なり、毎回親オブジェクトの下に手動でドラッグする必要があります。別の方法としては、オブジェクトを右クリックして、ポップアップメニューでオブジェクトを再作成する方法があります。個人的には、これはかなり面倒だと思います。
NGUIの場合、ほとんどのコントロール作成には対応するショートカットキーがあり、新しく生成されたオブジェクトを現在選択されているコントロールの直下に配置すると、非常に効率的で高速です。
ここで、先ほど紹介した方法でUGUIコントロールを作成するためのショートカットキーを追加します。コントロールを作成するときに、テキストフォントを一般的なフォントに変更したり、配置色を設定したりするなど、いくつかのデフォルトの初期設定を同時に行うこともできます。
using UnityEngine; using UnityEditor; using UnityEngine.UI; // 選択したオブジェクトでの右クリックメニューの作成と直接ショートカットキーの作成の両方をサポートします public class UGUIHotKey { private static GameObject CheckSelection(MenuCommand menuCommand) { GameObject selectedObj = menuCommand.context as GameObject ; / / オブジェクトを右クリックする操作ではない場合は 、(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ドキュメントを参照してくださいという意味のパラメータは、上記へのリンクがあり、機能インタフェースいくつかの他のコールの意味をも記載されている 静的な 無効はcreateImage(MenuCommand MenuCommand) { ゲームオブジェクトselectedObj = CheckSelection(MenuCommand); IF(selectedObj ==null ) 返す; 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 voidCreateText(MenuCommand menuCommand) { ゲームオブジェクト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; テキスト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 = " 新しいテキスト" ; t.rectTransform.sizeDelta = new Vector2(150f、30f); } }