しゅみぷろ

プログラミングとか

以前から気になってたUnityエディタ拡張で動画を見る方法試してみた

chroske.hatenablog.com

Unityのエディタ拡張で動画を見よう(というかWebView使って色々しよう)!というもの。 なんとも素晴らしい記事に心をつかまれました。

以前から気になっていたのですが、なかなかタイミングがなくてこの時期に。。。

処理内容

コードはネタの元記事を参照してください。

処理はとても単純で

  1. UnityEditor.dllのUnityEditor.Web.WebViewEditorWindow型をリフレクションで得る
  2. WebViewEditorWindowのCreateメソッドの情報を得る
  3. MakeGenericMethodでCreateのGeneric型引数を指定する
  4. InvokeでCreateを呼び出す

といった感じ。

UnityEditor.Web名前空間内のクラスが隠蔽されているため、その機能を使うためにリフレクションを使っているようです。 実際にILDASMで見てみるとCreateはこんな感じ。

f:id:es_program:20160425233704p:plain

んむ。そうか。そうか。 もうちょっと突っ込んで中身を見てみると大体こんな感じらしい。

public static WebViewEditorWindow Create<T>(string title, string sourcesPath, int minWidth, int minHeight, int maxWidth, int maxHeight) where T : new()
{
    WebViewEditorWindow webViewEditorWindow = ScriptableObject.CreateInstance<WebViewEditorWindow>();
    webViewEditorWindow.titleContent = new GUIContent(title);
    webViewEditorWindow.minSize = new Vector2((float)minWidth, (float)minHeight);
    webViewEditorWindow.maxSize = new Vector2((float)maxWidth, (float)maxHeight);
    webViewEditorWindow.m_InitialOpenURL = sourcesPath;
    webViewEditorWindow.m_GlobalObjectTypeName = typeof(T).FullName;
    webViewEditorWindow.Init();
    webViewEditorWindow.Show();
    return webViewEditorWindow;
}

これ見ると納得できますね。

実際に使ってみるとこんな感じ。

f:id:es_program:20160425233747p:plain

う~ん、素晴らしいです・・・

感動!