【UnityEditor】プロジェクトをまたいでエディター拡張したい

この記事のUnityのバージョンはUnity5.3.5f1です.

#はじめに
通常、エディター拡張はエディタースクリプトを入れたプロジェクトにのみ適用されます。
エディター拡張を複数のプロジェクトで使いたい、となった場合は各プロジェクトに個別にスクリプトを
入れなければならないので若干手間がかかります。

そこで、プロジェクトをまたいでエディター拡張する方法はないか調べてみました。

いろいろ書いてたら長くなってしまったので実装だけ見たい方は[3.エディター拡張してみる](http://qiita.com/r-ngtm/items/493fdcbd62eb94031c6e#3-%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%83%BC%E6%8B%A1%E5%BC%B5%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B)をどうぞ

#1. Editor\Data\UnityExtensions\Unityを見てみる
Editor\Data\UnityExtensions\Unityを見てみます。 (筆者はDドライブにUnityをインストールしているのでD/***になっていますが通常はCドライブにあるはずです

中にEditorTestsRunnerがありました。
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/addc85b1-b7a5-c7bb-a1e5-6fbafbe2a053.png)


Unityエディタのメニューにも同じものがあります。　
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/58d2c34d-d55f-c6ba-3ca1-14e4456fd08b.png)

先ほどのEditorTestsRunnerフォルダは、UnityメニューのEditor Tests Runnerに相当するものではないかと気がつきました。
<br>
Editor\Data\UnityExtensions\Unityにエディタースクリプトを置けばエディター拡張できそうです。 

#2. さらに中を見てみる
##EditorTestsRunner
EditorTestsRunnerフォルダの中身を見てみると、このような構成になっていました
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/65cac80e-a7df-1cc9-a7e7-6a8c2793118f.png)

##TreeEditor
TreeEditorフォルダの場合はこのような構成になっていました
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/cb79f395-78cb-f54c-52a5-f29b1023ef78.png)

<br>
以下の2つのファイルがあれば良さそうだと読み取れます。
・ivy.xml
・Editor/(エディタースクリプト名).dll

以上を踏まえてエディター拡張してみます。

#3. エディター拡張してみる
##フォルダを作成
まず、Editor\Data\UnityExtensions\Unityの中にフォルダを作成します。フォルダ名はTestとしておきます。
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/29c3b1e4-150b-9282-a9f6-a0c5452b4b12.png)


Testフォルダの中にはEditorフォルダを作っておきます。
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/3101eb60-c01e-de9f-d9a2-1f92e369a90f.png)

##スクリプト作成
以下のスクリプトを作成し、Editorフォルダへ入れます。

```TestClass.cs
using UnityEngine;
using UnityEditor;

public class TestClass
{
    [MenuItem("TestMenu/Test")]
    static void TestMethod ()
    {
        Debug.Log ("TestMethod");
    }
}
```

##DLLへ変換
Editorフォルダの中に以下のbatファイルを作成＆実行してTestClass.csをDLLへ変換します。

```build.bat
smcs.batのファイルパス -r:"UnityEngine.dllのファイルパス" -r:"UnityEditor.dllのファイルパス" -target:library -out:Test.dll *.cs
```

![image](https://qiita-image-store.s3.amazonaws.com/0/44288/4b3dcbe2-d49d-9944-e3ff-a4db0fae19be.png)

参考 : <a href="http://famme-fatale.hatenablog.com/entry/2015/03/27/231916">【Unity5】UnityスクリプトをDLLファイル化する方法</a>

##xmlの作成
Testフォルダ直下にivy.xmlを作成します

```ivy.xml
<?xml version="1.0" encoding="utf-8"?>
<ivy-module version="2.0">
  <info version="5.3.5" organisation="TestOrganisation" module="TestModule" e:packageType="UnityExtension" e:unityVersion="5.3.5f1" xmlns:e="http://ant.apache.org/ivy/extra" />
  <publications xmlns:e="http://ant.apache.org/ivy/extra">
    <artifact name="Editor/Test" type="dll" ext="dll" e:guid="adebbd281f1a4ef3a30be7f21937e02f" />
  </publications>
</ivy-module>
```

```info version```, ```e:unityVersion``` にはお使いのUnityのバージョンを指定してください

<br>
ここまで終えると以下のような構成になっているはずです。
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/f557db50-5502-4983-383a-b68e361dbaab.png)

以上でエディター拡張は完了となります。

#4. Unityを起動
エディター拡張がうまく動いているかを確認するため、新規UnityProjectを作成してみます。
<img width = 480 src = "https://qiita-image-store.s3.amazonaws.com/0/44288/83fcada8-cdff-451f-2b14-3d315048f93a.png">

#5. 結果
<img width = 480 src = "https://qiita-image-store.s3.amazonaws.com/0/44288/3b10a1ba-eb04-052c-2551-96def4df292b.png">
メニューが追加されていることが確認できました。 Assetsフォルダには何も入れてません。

プロジェクトをまたいでエディター拡張することができました。(完)

<br>
##余談
Testフォルダは以下のように配置してもOKなようです。 
![image](https://qiita-image-store.s3.amazonaws.com/0/44288/2fbdb90b-b59d-2395-6622-a0c5c1e54de6.png)
フォルダの場所はUnityExtensionsフォルダ以下であればどこにおいても認識されるのかもしれません


#参考URL
Module Managerを使って自作ライブラリを読み込んでみた - けいごのなんとか
http://anchan828.hatenablog.jp/entry/2014/10/15/231013