うえすと開発メモ

Unity4.5.3からResourcesディレクトリ配下のアセットの読込を非同期で行うResources.LoadAsync()メソッドが追加されたので試してみました。


戻り値であるResourceRequestで進捗の取得や優先度の設定が行えます。

このエントリーをはてなブックマークに追加 Clip to Evernote

Unity4.3以降でビルドしたAndroidアプリで上部のStatus Barを隠さない設定で、ソフトキーボードを表示すると以下のように画面全体のサイズが小さくなってしまう現象があります。

この画面が
unity_android_softkey_01
こうなってしまう。
unity_android_softkey_02
Activity全体がリサイズされてしまいます。
AndroidManifest上でwindowSoftInputModeを変更したりしても防げませんでした。

参考:UnityForums Android Manifest Not Working Properly

上記フォーラムでは最後にUnityPlayerActivityをオーバーライドしたActivity内で
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
を呼び出しWindowの設定を変更すれば解決するとなっているのですが、 
前回の「UnityからAndroidのUIスレッドで処理を行う」を使用してUnity側のC#コードから設定してみます。


このコンポーネントを付けたGameObjectを最初のシーンに配置します。
これでキーボードを出しても画面サイズが小さくならなくなりました。
unity_android_softkey_03

このエントリーをはてなブックマークに追加 Clip to Evernote

AndroidJavaClassAndroidJavaObjectを使えば、UnityからActivityやJavaのObjectにアクセス出来るのですが、Androidでは別スレッドからUIを操作することができません。
UI操作を行いたい場合はActivity.runOnUiThreadを使用します。

これをUnityから使いたい場合にはAndroidJavaRunnableを使用して、
指定したメソッドをRunnableとしてUIスレッドに投げます。

リファレンスのコードではコンパイルエラーになってしまいますが、
AndroidJavaRunnableのnew宣言が抜けているだけなので以下のようにすれば使えます。


これならプラグイン作ったりActivityをオーバーライドしないで済むので手軽で便利です。

このエントリーをはてなブックマークに追加 Clip to Evernote

このページのトップヘ