ブログ ホームページ

ブログ タイトル

UnityでUWP WebView Plugin

(2018/05/20)

ブログ 内容

Android版の開発が終わったのでUWP版を作ろう

WebViewの表示がしたい
となったのでPluginを開発することにしました。

Plugin自体は検索してこのサイトとか色々参考にして簡単にできました。
(ちなみに上記のサイトも含めEditor用のPluginも作ってたりしますがUnity側のソースで空のクラス&関数を#if UNITY_WSA && UNITY_EDITOR辺りで囲っておけば代用できたりもします。)

んで、後はWebViewをUnity側のViewにでもくっつければいけるかなと思ったのですが、これがなかなか見つからない。
検索してもなんかUnityって名前の付くUWPのライブラリがあるっぽくて見つけにくいし…。
それでも試行錯誤してできたので一部抜粋でソースを載せときます。
public async void Init() //awaitを使うのでasyncを使用
{
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,//UIスレッド内でしかWebViewを作れないので もうちょっと簡単な呼び出し方法もありそうだけど呼び出せたのでそのまま
() =>
{
try
{
//Childに追加できるまで潜る
//ここら辺はUnityのバージョンによって変わる可能性があるので適宜変更してください。
//通らない場合は↓はobjectなのでToString等で種別確認して変更してください。
Frame frame = Window.Current.Content as Frame;
Page page = frame.Content as Page;
Panel panel = page.Content as Panel;

WebView web = new WebView(WebViewExecutionMode.SameThread);
//WebViewの表示位置やサイズ変更、URIをセットしたりしてください。

panel.Children.Add(web);
}catch(Exception){
}
});
}

Pluginも開発したのでパッケージ化したのですがここでエラーが発生。
検索かけるとMasterでビルドする必要があったので
Unity側のビルドとVSでのビルドを両方Masterに変更。
しかしさらにエラーが。
(プロジェクト名).dllでUWPで呼び出せないAPIを使用してるとかなんとか。
どこが原因かわからないので仕方なくプロジェクトコピーして徐々に削除しながら確認とったのですが、これがすごい時間がかかる。
エラーの確認がパッケージ化しないとわからない上にパッケージ化して確認とるまでに1回につき20分以上かかるという苦行。
そのうえ十数回のトライでプロジェクト内が空になってもまだエラーが出る。
新規プロジェクトで確認とるとエラーは出ないのでどこが違うのか色々確認してたら、ふとタイトル名(Product Name)がVSのプロジェクト名になってるなと思いタイトル名から!を抜いたら通った…。
タイトル名をそのままプロジェクト名に変換すんなよ。と思いつつもようやく完成しました。

インデックスへ 戻る