テラシュールブログ

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

Unity 4.3 androidでWebViewを使用した際のキーボード不具合対策

Unity 4.3より以降greeのWebViewアセットAndroidで使用した場合、キーボードが正常に動作しない不具合等が確認されている。この不具合はAndroid 4.4で修正されているのだが、4.3以前のAndroidバイスを使用したい場合、幾つか対策が必要となる。

対応方法としては、今のところ3つの方法がある。

  • NativeActivityではなくActivityを使用する
  • Unityに届いたメッセージをフックしてWebViewに伝える
  • キーボードを自作する
なお、この問題はUnity側も把握しており、Issue Trackerにも登録されている。

Backspace doesn't works in WebView android plugin

でもvote(バグ修正に賛成)が今日の地点で7。意外と誰も困ってないのかな。


■NativeActivityではなくActivityを使用する

まず、NativeActivityではなくActivityを使用する方法。

  1. Google Android Projectでプロジェクトを出力
  2. プロジェクト内に自動で出力されるActivityの継承元をNativeActivityからActivityへ変更
  3. アプリケーションをEclipseでビルド
要するにActivityをNativeActivityからActivityへ変更するだけでOK。ただし、NativeActivityはActivityと比較して描画・イベント・応答周りでそれなりに差が出るっぽいので、注意。この問題が治ったらNativeActivityを使うことをお勧め。

Eclipseに出力するのが面倒な人向けにパッケージも一応用意した。これをインポートすればUnity 4.3以降であってもActivityを継承した物を使用可能なので、キー入力が剥がれる事は無い。但し、マニフェストが入っているので、既にマニフェストファイルを用意している人はマニフェストが上書きされないように注意。

簡単導入パッケージ

(ちなみにコレはUnity4.3のバグではなく、4.2でもあったが皆がUnityActivityを使っていたおかげで表面化してなかっただけ。Unity4.2に戻す選択肢はおすすめしない)


追記(20140619)

Manifestファイルの設定に誤りがあったので簡単導入パッケージを修正。変更点は以下のとおり。これをしないと入力が届かない。

これを・・・
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />

こうじゃ
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />



■Unityに届いたメッセージをフック

この問題はNativePlayerActivityの反応がよくキー入力を奪ってしまう事にある。その為、特定のキー入力を改めてWebView側に送り直すことで、問題を回避することが出来る。NativeActivityのパフォーマンスを使いつつキー入力も可能にするので、案外良く動くかもしれない。は
実装はFacebook助け合い所参考の事


■キーボードを自作する

キーボードが正常に動作しなければ自作すれば良いじゃないって話。
ドラクエ8とかはそうしてるくさい。



ちなみにWebViewをタップできないのは不具合ではなくマニフェスト不足。
詳しくは[Uniy] Unity4.3上で作ったWebViewの操作ができなくなる問題を参照のこと。

ブログの質問が来ていたので、回答


書き忘れてたが、webview自体を別Activityにする方法とか、別Activityを作ってUnityに通知する方法とかもあったような