C#
Unity
Unity拡張
UnityEditor

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

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

どうして出前?

1.@kaorun55 さんのtweetを見て。
2.twitterでOculusGoの話の流れから2014年グローバルゲームジャムの話が出てきて、ランチ外出する余裕なくて会場にピザ出前したの思い出したので。
(出前がらみといえば MA11鹿児島ハッカソンのやつも出前がらみだった。

ゴール設定。Unityから出前注文する。

image.png

ざっくり仕組み

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

1.VisualStudioでプロジェクト作る。

image.png

2.「Visual C#」の「クラスライブラリ」を選択、名前(とりあえずdemae)を入力しOK押下。

image.png

3.とりあえず保存する。

image.png

4.「プロジェクト」→「プロパティ」を開く。

image.png

「アプリケーション」→「ターゲットフレームワーク」を「.NET Framework 3.5」に変更。プロジェクト再起動を求められるのでOKを押下。

image.png

5.「プロジェクト」→「参照の追加」を開く。

image.png

「参照マネージャー」で「参照」をクリックし利用するUnityフォルダ内の「\Editor\Data\Managed」開き「UnityEditor.dll」と「UnityEngine.dll」を選択して「追加」ボタン押下。

image.png

6.「ソリューション エクスプローラー」で「Properties」内の「AssemblyInfo.cs」を選択。

image.png

「using UnityEngine;」 、「 [assembly: AssemblyIsEditorAssembly] 」を追加

image.png

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

image.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

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

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

11.Unity起動して確認。

image.png

12.ホントに注文できるか確認。

image.png

これでUnityからピザでも寿司でもカレーでも、出前取れますね。

ここまでして思ったけど、Qiitaを表示しても地味に便利かもしれない…