Unityに出前メニューを追加する

Unityのメニューから出前注文やってみた。
これでゲームジャムも大丈夫。

#どうして出前？
1.@kaorun55 さんの[tweet](https://twitter.com/kaorun55/status/1006021361574137856)を見て。
2.[twitter](https://twitter.com/8moti8/status/998051339539120130)でOculusGoの話の流れから2014年グローバルゲームジャムの話が出てきて、ランチ外出する余裕なくて会場にピザ出前したの思い出したので。 
（出前がらみといえば [MA11鹿児島ハッカソン](https://ma2017.we-are-ma.jp/2015/11/2ndbattle_2/)のやつも出前がらみだった。

#ゴール設定。Unityから出前注文する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/9596/785c5f5b-2e41-feee-be25-230ceb8e2a07.png)

 
#ざっくり仕組み
VisualStudioでwindowにブラウザ表示するエディタ拡張するクラスライブラリ作ってUnityに適用する。


#1.VisualStudioでプロジェクト作る。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/9596/39ebf00e-d304-6f03-3a4e-ebe0355366e9.png)

#2.「Visual C#」の「クラスライブラリ」を選択、名前（とりあえずdemae）を入力しOK押下。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/9596/3733ef31-72a3-3348-3a37-bcad9a04c919.png)

#3.とりあえず保存する。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/9596/dfb6ac62-9252-809e-5eff-196d9b9e428d.png)

#4.「プロジェクト」→「プロパティ」を開く。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/9596/b69d38ad-4a41-3394-a34a-2a7c3e1b289b.png)

##「アプリケーション」→「ターゲットフレームワーク」を「.NET Framework 3.5」に変更。プロジェクト再起動を求められるのでOKを押下。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/9596/13bcbe58-5829-ceca-f8de-86509c1cb568.png)

#5.「プロジェクト」→「参照の追加」を開く。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/9596/d2c13f16-80b0-fea4-6143-f4543cbeeb7e.png)

##「参照マネージャー」で「参照」をクリックし利用するUnityフォルダ内の「\Editor\Data\Managed」開き「UnityEditor.dll」と「UnityEngine.dll」を選択して「追加」ボタン押下。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/9596/46815e4c-4dd9-a1e3-e73f-8588683ab3a0.png)

#6.「ソリューション エクスプローラー」で「Properties」内の「AssemblyInfo.cs」を選択。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/9596/32e11a71-aa60-5159-c9fc-008bd672d16f.png)

##「using UnityEngine;」 、「 [assembly: AssemblyIsEditorAssembly] 」を追加
![image.png](https://qiita-image-store.s3.amazonaws.com/0/9596/c5374a59-40ca-712d-477e-ac9b3e641910.png)

#7.「Class1.cs」にコード記述してエディタにWeb ページを表示実装。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/9596/f31ce440-087c-5109-6e39-11adf3238840.png)

```Class1.cs
using System.Reflection;
using UnityEditor;

namespace demae
{
    public class Class1
    {
        [MenuItem("Tools/demae")]
        private static void Show()
        {
            var type = typeof(Editor)
                .Assembly
                .GetType("UnityEditor.Web.WebViewEditorWindowTabs");

            var attr =
                BindingFlags.Public |
                BindingFlags.Static |
                BindingFlags.FlattenHierarchy;

            var methodInfo = type
                .GetMethod("Create", attr)
                .MakeGenericMethod(type);

            methodInfo.Invoke(null, new object[]
            {
            "demae", // 表示ウィンドウのタブ名
            "https://demae-can.com/", // URL
            300, // 最小幅
            300, // 最小高
            1000, // 最大幅
            1000 // 最大高
            });
        }
    }
}
```


#8.「ビルド」→「demaeのビルド」でDLLのビルド。「【3で保存したフォルダ】\ClassLibrary1\bin\Debug」フォルダに「demae.dll」が作成。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/9596/26b48ee5-04ce-20e4-4b73-b39c6c7005bf.png)


#9.利用バージョンUnityフォルダ配下の「Editor\Data\UnityExtensions\Unity」に「demae」フォルダ作成しdllやunityバージョンを指定し「ivy.xml」の作成。

```ivy.xml
<?xml version="1.0" encoding="utf-8"?>
<ivy-module version="2.0">
  <info version="1.0.0" organisation="yourname" module="demae" e:packageType="UnityExtension" e:unityVersion="2018.1.3f1" xmlns:e="http://ant.apache.org/ivy/extra" />
  <publications xmlns:e="http://ant.apache.org/ivy/extra">
    <artifact name="Editor/demae" type="dll" ext="dll" />
  </publications>
</ivy-module>
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/9596/46ed0cdb-db07-8096-5ea1-d1dfc0c7884a.png)

#10.「demae」フォルダ内に「Editor」フォルダ作成し「demae.dll」配置。

#11.Unity起動して確認。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/9596/785c5f5b-2e41-feee-be25-230ceb8e2a07.png)

#12.ホントに注文できるか確認。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/9596/9b244aa1-11a5-566c-51e8-2391db91e95a.png)

#これでUnityからピザでも寿司でもカレーでも、出前取れますね。
ここまでして思ったけど、Qiitaを表示しても地味に便利かもしれない…