Unityでよく使うパターンを Visual Studio 2015のコードスニペットに登録する
システム
頻繁に使うパターンをコードスニペットに登録して、楽に入力できるようにしましょう。
おはようございます。
自称 積木製作の『動』表現担当 中谷です。
ゲームなどのインタラクティブコンテンツを作っているうちに、
頻繁に使っているパターンがあることに気付くと思います。
私の場合、定番なタイマー処理のコルーチンだったり、Monobehaviourのシングルトン化だったり。
そういうのを自分でコードスニペットに登録したいと思い、ちょっと調べてみました。
コードスニペットとは
コードスニペットとは、ざっくり言うと
「登録しておいたコードをドカッと書いてくれる呪文」でしょうか。
何度も何度も書いているようなコードパターンがあれば、コードスニペットに登録しておけば、
ショートカットワードをタカタンッと打ち込んで楽に呼び出せるようになる優れものです。
登録したいパターンを用意する
ひとまず、登録したいパターンを用意します。
今回は、冒頭でも説明した「タイマー処理のコルーチン」と「MonoBehaviourのシングルトン化」で。
ちなみに、上記のシングルトンパターンは、こちらのスライドを参考にして使っています。
.snippetファイルを用意する
こちらで簡素なものを用意しましたので、お使い下さい。
(なお、シンタックスハイライトを有効にするために
下記のgistでは拡張子を.xmlにしていますが、
実際に使うときは.snippetに変更してください。)
ひとまず、このファイルを「任意のファイル名.snippet」にして、
後述の登録をすることで、
「タイマー処理のコルーチン」が入力できるようになります。
.snippetファイルに書き込む
それでは、任意のコードをスニペットに登録するために、
必要な項目を書き込んで行きましょう。
<Header>
<Title>Timer Coroutine</Title><!-- タイトル -->
<Description>タイマー処理のコルーチン</Description><!-- 説明 -->
<Shortcut>CTimer</Shortcut><!-- ショートカットワード -->
</Header>
まずはHeaderです。
ここで重要なのは<Shortcut>の項目です。
ここで入力する文字列はスニペットを呼び出すための予約語として登録しますので、
自分で覚えやすい、打ちやすいものにしておきましょう。
Title、Descriptionは、自分でわかるものにしておきましょう。
<Snippet>
<Code Language="csharp">
<![CDATA[
// 登録したいコードをここへ
IEnumerator CustomTimer (float _dur ) {
float _timer = 0f;
while(_timer < 1f) {
_timer = Mathf.Clamp01(_timer + Time.deltaTime/_dur);
//Main Function
yield return new WaitForEndOfFrame();
}
yield break;
}
// ここまで
]]>
</Code>
</Snippet>
続いて、Snippetタグの中のCode。
ここの[CDATA[ (ココ!) ]] に、スニペットで登録したいコードを入力します。
特に何か書き換えが必要ないものなら、そのままコピペで大丈夫です。
ここまでの処理が完了したら、ファイルを保存します。
Visual Studio 2015 に登録する
Visual Studio 2015 を起動して、ツール >コードスニペットマネージャを開きます。
左下のインポートを押し、先程作成した.snippetファイルを読み込みます。
保存場所を指定し、「完了」を押したら登録完了です。
登録したコードスニペットを実際に使用する
それでは、登録したコードスニペットが使用(挿入)できるのかどうか、
任意のスクリプトで試用してみましょう。
Shortcutタブに登録したワードを打ち込み(補完で出ます)、
Tabキーを2回押すと実行されます。
実行できたでしょうか?
これで、無事にコードスニペットの登録・挿入することができました。
同一.snippetファイルに追加スニペットを追加する
.snippetファイルには、複数のコードスニペットを登録することができます。
CodeSnippetタグ以下をコピペし、書き換えれば完了します。
下記では、新たに「MonoBehaviourのシングルトン化」のコードスニペットを追記しました。
これを再びVisual Studio でインポートすると、(上書きで結構です)
Singletonのコードスニペットも挿入可能になります。
スニペットの挿入後に、一部を置き換えたい
新しく追加したSingletonのコードスニペットには、
先程のCTimerのスニペットにはなかった記述があります。
<Snippet>
<Declarations>
<Literal Editable ="true">
<ID>type</ID>
<Default>Component</Default>
</Literal>
</Declarations>
<Code Language="csharp">
<![CDATA[ public static $type$ _instance;
private void Awake () {
if (_instance == null) {
_instance = this;
}else if (_instance != null) {
Destroy(this.gameObject);
}
}
public static $type$ GetInstance () {
return _instance;
}
private void OnDestroy () {
if (_instance == this) {
_instance = null;
}
}
]]>
</Code>
</Snippet>
Snippetタブの中に、Declarationsタブ、そしてLiteralタブ、IDタブが追加されています。
CDATAの中にも、$$マークに囲まれた何かがありますね。
Literalタブの中に指定した要素は、スニペットを挿入した後に置き換え処理を指定できる項目です。
この場合は、$type$ の部分のクラスを後から書き換えたいために使用しています。
(シングルトンパターンなので、書かれるスクリプトと同じクラスを指定する必要がある)
書き換えなければ、DefaultタブのComponentが自動的に書き込まれます。
任意の型や変数名に置き換えたいものは、このようにDeclarations、Literalを追記しましょう。
実行すると、このようになります。
Tabキーを2回押した後、続けて書き換えたい内容を入力し、
Enterで確定すれば、自動的に置き換わります。
おわりに
正直な話、Visual Studioはまだその機能をあまり把握出来ておらず活用しきれていないのですが、
Unity Technologies Japan の安藤圭吾さんのスニペットなどにはよく利用させてもらっているので、
自分でもコレ編集できないかなぁと思って試してみました。
正確な使い方や説明ではないかと思いますが、ご容赦下さい。良ければご指摘ください。
いつもいつも書いてる面倒な処理があったら、軽い気持ちでコレをやってみてください。
それでは、また。
参考記事
Gari Lab:コード入力量を更に減らす!VisualC#のコードスニペットを作成する方法
http://garicchi.hatenablog.jp/entry/2014/03/28/095535
ウダサンコウボウ:[Unity]いつものコードを10秒速く書く、VisualStudioのコードスニペット(配布あり)
http://udasankoubou.blogspot.jp/2015/12/unity10visualstudio.html