テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Unity上でWebViewを開く unity-webview

注意

これは要するに2つのアプリを立ち上げてプロセス間通信で連携すると同義なので、酷使するとあっさり壊れます。あとエディタで確認するにはProが必要。

これで複雑なこと(ゲームUIとして組み込む等)する場合、WebView側とUnity側の両方の理解が無いと問題の切り分けができなくて炎上する気がする。

あとネイティブプラグインで使ったメモリはUnity側はほぼ関知していないので、ちゃんと自分で破棄しないと大変な事に…メモリ管理はご注意を。



スクリーンショット 2013-05-24 0.00.26
unity-webviewは、要するにUnity内でWebページを表示するアセットだ。Unity上でWebブラウザWebKit)を開き表示する感じ。

これは対ローカルにも使えるし、Web上のページも表示出来る。またWebページからUnityプレイヤーへメッセージを飛ばしたりして連携したりも出来る。さらに(試していないが)JavaScriptも多分動く。CSSも(試していないがry

あんまり酷使するのは問題だが、「チュートリアル」や「お知らせページ」を表示するのであれば役に立つと思う。

ちなみにiOS/Android/PCに対応している。(PCはPro版が必要)



紹介するアセットは、appbankgamesさんがフォークしているunity-webview。
確認する限り、これが一番まともにメモリを消してくれている。(ように見える)
↑全部見てない

appbankgames / unity-webview
https://github.com/appbankgames/unity-webview

ちなみにwebplayerでは動かないっぽ(ネイティブプラグイン使ってるので)


■使い方

まずは導入。ここからZipをダウンロードし解凍、dist>unity-webview.unitypackageをインポートする。

スクリーンショット 2013-05-23 23.06.36

単純にWebViewを表示するには、下のように書く。

WebViewObject webViewObject = gameObject.AddComponent ();
webViewObject.Init(null);
webViewObject.LoadURL (url);
webViewObject.SetVisibility(true);

消したければ、下のように書く。
この時、プラットフォームをiOSとか指定しているとUnityエディタが落ちるかもしれない。注意。

webViewObject.SetVisibility(false);

HTML側からUnityへメッセージを投げたい場合は、下のようなURLを叩くようにする。

<a href="unity:click">CLICK</a>

コールバックは下のように書く。
今回の場合はwebViewObjectをアタッチしたコンポーネントに書く。

void CallFromJS(string message)
{
if( message.Equals("click") )
Debug.Log("click");
}
これでCLOCKリンクを押すとコンソールにclickと表示される。

ちなみに、webViewObject.Initでコールバックを登録することも出来る。(多分こっちが正解)

webViewObject.Init((message)=>
{
if( message.Equals("click") )
Debug.Log("click");
}