Unityのエディタ拡張でキーボードショートカットを実装する方法をまとめました。
- はじめに
- グローバルなショートカットを作成する
- EditorWindowのショートカットを作成する
- EditorWindowのショートカットとグローバルなショートカットのコンフリクト
- ショートカットマネージャー
- 参考
Unity2019.4
はじめに
この記事ではUnityのエディタ拡張でキーボードショートカットを実装する方法についてまとめます。
UnityにおけるショートカットはUnity2019.1で導入されたショートカットマネージャーによって簡単に設定できるようになったので、基本的にはこれを使った方法を紹介します。
ただしEditorWindowでコンフリクトが発生するケースでは従来の方法で実装する必要があるのでこれも併せて紹介します。
グローバルなショートカットを作成する
まずグローバルな(Unity上のどこでも動作する)ショートカットの設定方法です。
ショートカットの設定にはShortcut
アトリビュートを使います。
[Shortcut("ExampleShortcut / Global", null, KeyCode.G, ShortcutModifiers.Action)] public static void GlobalExample() { Debug.Log("Global Example"); }
第一引数にはショートカットマネージャーに表示される名前を入れ、
第二引数はグローバルなショートカットの場合にはnullを入れておきます。
第三引数にキーを入力します。
またShiftやCommandを押しながらのショートカットを設定するには第四引数も設定します。
上記のShortcutModifiers.Action
はWindowsならCtrl、MacならCommandを示します。
EditorWindowのショートカットを作成する
つぎに特定のEditorWindow上でのみ動作するショートカットを作成します。
このためには以下のように第二引数に特定のEditorWindowの型を指定します。
[Shortcut("ExampleShortcut / Local", typeof(ExampleWindow), KeyCode.L, ShortcutModifiers.Action)] public static void LocalExample() { Debug.Log("Local Example"); }
これでこのショートカットはExampleWindowでのみ動作するようになりました。
EditorWindowのショートカットとグローバルなショートカットのコンフリクト
EditorWindowのショートカットとグローバルなショートカットはコンフリクトする可能性があります。
例えば以下のようにCtrl + SのショートカットをEditorWindowに設定するとあらかじめ設定されているグローバルなものとを衝突します。
[Shortcut("ExampleShortcut / Local", typeof(ExampleWindow), KeyCode.S, ShortcutModifiers.Action)] public static void LocalExample() { Debug.Log("Local Example"); }
コンフリクトしたショートカットを実行しようとすると以下のような警告画面が表示されてしまいます。
このような場合には従来のようにEditorWindowのOnGUIでショートカットを設定する必要があります。
もしEditorWindowのCtrl + Sを優先したい場合には以下のようにOnGUIで処理をしてからEvent.Use()
をしておけばショートカットマネージャーのショートカットは実行されません。
private void OnGUI() { var e = Event.current; if (GetEventAction(e) && e.type == EventType.KeyDown && e.keyCode == KeyCode.S) { Debug.Log("Local Example"); e.Use(); } } private bool GetEventAction(Event e) { #if UNITY_EDITOR_WIN return e.control; #else return e.command; #endif }
なおUIElementsの場合はOnGUIではなく以下を使います(試してないので詳細は割愛)。
ショートカットマネージャー
ちなみにショートカットマネージャーに設定されているショートカットはEdit > Shortcuts
(Macの場合はUnity > Shortcuts
)から確認できます。
これを使うと自分なりのショートカットキーにカスタムできたりしますが、今回の主旨から逸れるので割愛します。