「MonKey - Productivity Commands」のコマンド操作でUnity開発を効率化する

[PONOS Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ponos)の2日目の記事です。

昨日は@honeniqさんの[fish shellのはじめかた 2019冬](https://qiita.com/honeniq/items/0a5e74a554d8bdc6b8c5)でした。


## はじめに

Asset Storeで販売されているアセット「MonKey - Productivity Commands」を導入することにより、コマンドでUnityの各種操作を実行できるようになります。
Unityエディタ上での開発速度の向上が期待できると感じたので、紹介したいと思います。

なお、

* Unity 2019.2.12f1
* MacOS 10.14.6

の環境で動作確認しています。

## 「MonKey - Productivity Commands」とは

![assetstore.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7345/b2152d8c-ab90-e881-a6ab-c617bb91c923.png)
[MonKey - Productivity Commands - Asset Store](https://assetstore.unity.com/packages/tools/utilities/monkey-productivity-commands-119938)

* 1シート$40
* 対応するUnityバージョンは2017.4.1以上
* コマンド操作で様々な機能を実行して開発できる。
* デザイナー、アーティスト、プログラマのための130個以上のコマンドを用意。
* 属性を使うことでカスタムコマンドの追加も可能。
* 公式ドキュメント([MonKey - User Guide](https://sites.google.com/view/monkey-user-guide/home))

## 導入

* Unity Asset Storeで購入後、プロジェクトにインポートしてください。<br/>(デモが不要であれば、Plugins/Monkey Commander/Demo!は削除して構いません)
* インポートが完了するとGetting Startedのダイアログが起動しますが、使い始めるために追加設定は必要ないので、<br/>そのまま閉じてしまいましょう。<br/>
![getting_started.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7345/59c9784e-159d-163b-4fe9-63a1a426e97f.png)
* 以上で導入は完了です。非常に簡単ですね。
* 「`」キーを入力すると、Monkeyのコマンドパレットが表示され、コマンドの入力が可能になります。<br/>
![monkey.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7345/7e0c6b99-9e45-8857-e461-1b91fadb04d9.png)


## 基本的な使い方

* コマンドパレットに検索文字列を入力するとコマンドの候補が表示されます。
    * 省略形のコマンドも用意されているので、頻繁に使うコマンドについてはこれを覚えると入力を短縮できます。
    * 一部のコマンドにはホットキーも用意されています。これらのホットキーはMonkeyのコマンドパレットを表示していなくても利用できます。<br/>
![select_command.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7345/f1755735-9448-b15c-4f92-e50fa399a831.png)

* 「↑」「↓」キーで候補の中から実行するコマンドを選択、「Enter」キーでコマンドを実行します。
    * コマンドによっては実行時に追加のパラメータ入力が必要になるものもあります。
    * 操作感はMacアプリケーションの「Alfred」やUnityアセットの「Quick Search」に近いので、これらのアプリケーションを利用している方は馴染みやすいと思います。

## 使用例：Imageコンポーネントを持つGameObjectの名前の末尾に「_IMG」を追加する

ここからはMonKeyを活用する一例を紹介します。
以下のようなシーンをサンプルに、Imageコンポーネントを持つすべてのGameObjectについて、それが「イメージを表示しているオブジェクト」であると認識しやすいように、名前の末尾に「_IMG」を追加してみましょう。
![Screen_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7345/81cd8906-bfab-de47-ffe6-ba265f624f01.png)<br/>※Man、Woman、Cat、DogのGameObjectがそれぞれImageコンポーネントを持っています。

この処理を通常の手順で実現しようとする場合、名前の変更を1GameObjectずつ手作業で行わなくてはならず、非常に手間がかかります。しかし、MonKeyを使用することで、その手順を大幅に短縮することが可能となります。
今回の使用例で使用するコマンドは以下の2つです。

**Select Scene Objects of Type**
指定した型を持つGameObjectをすべて選択します。
省略コマンドとして「ST」が用意されています。

**Rename Add Name Suffixes**
選択されているすべてのGameObjectの名前の末尾に指定した文字列を連結します。
省略コマンドとして「RNS」が用意されています。

では、MonKeyを使用した場合の手順を見てみましょう。

1. 「`」でMonKeyのコマンドパレットを開く。
2. 「ST」を入力し、「Select Scene Objects of Type」コマンドを選択する。<br/>
![Screen_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7345/c16d6b11-f2ed-d0c5-9b5d-9c51edc66252.png)
3. 「Select Scene Objects of Type」コマンドの追加パラメータ入力として、型名の入力フィールドが表示されるので、「image」を入力してコマンドを実行する。<br/>
![Screen_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7345/a92157eb-33f5-bd97-3d63-bb9068645247.png)
4. ここまでで、Imageコンポーネントを持つGameObjectだけをすべて選択できた状態となる。<br/>
![Screen_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7345/41299f51-44da-a300-c2a6-0b2464eaa59b.png)
5. 「`」で再度MonKeyのコマンドパレットを開く。
6. 「RNS」を入力し、「Rename Add Name Suffixes」コマンドを選択する。<br/>
![Screen_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7345/376da8e9-6526-c3e9-e15b-8229b96f15e1.png)
7. 「Rename Add Name Suffixes」コマンドの追加パラメータ入力として、連結する文字列の入力フィールドが表示されるので、「_IMG」を入力してコマンドを実行する。<br/>
![Screen_6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7345/98ae0cfa-38e3-880b-1f0b-e89e7244429a.png)
8. 選択中のすべてのGameObjectの名前が「〜_IMG」の形に変更される。
![Screen_7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7345/e4e9f483-78fa-4887-0bc0-d2ecb615662a.png)

以上です。
1個1個のGameObjectを選択して名前を編集する必要がないため、非常に効率的です。

## おわりに

本来、複数の操作を組み合わせなければ実現できない処理でも、MonKeyを活用することで1コマンドで実行することができるようになります。
日頃頻繁に実行している処理ほど操作時間や手順が短縮されることによる恩恵は大きいので、

**「昨日も同じ手順で面倒な処理をしていた」**

と心当たりがある方は導入を検討してみてはいかがでしょうか。

明日は@blockさんです！