uGUIのキーボード入力ができない
Android、iOSでのキーボード入力を念頭にアプリ開発を行っていたところ、uGUIのInputFieldにて躓くことが多かったのでメモしておきます。
スタンダードな実装
- Canvasを追加する
- InputFieldを追加する
- InputField下にはPlaceholderとTextがついてくる
すごく簡単なはずですが、実機だとなかなか動いてくれません。。。
以下、不具合別の手順を記載。
Androidにて、入力確定時に文字が消し飛ぶ
最初こちらが発症しました。
調べてみると、Unity4.6.3より刷新されたPlayerNativeActivityがらみの事象のようでした。
Unity 4.3 androidでWebViewを使用した際のキーボード不具合対策 - テラシュールブログ
こちらはPlayerNativeActivityを旧仕様(PlayerActivity)に切り戻すやり方が記載されています。わたしのほうはPlayerNativeActivityをAndroidManufestに設定することで動きましたが、もしかしたら検証機が少ないだけな可能性もあり若干不安。
<activity android:name="com.unity3d.player.UnityPlayerNativeActivity"
android:label="@string/app_name"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> -->
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
</activity>
日本語入力ができない
LineTypeがSingle Lineだとうまく動かないようで、Multi Line New Lineにて実装しました。
こちらだと、改行コードやタブが入り込んでしまうことがあり、今回の仕様でははじきたかったので、スクリプトをかませました。
- 改行やタブは削除する
- 未入力の際は規定値に戻す
public class InputCheck : MonoBehaviour { string defaultText; string[] delWord = { "\n", "\t", }; void Start() { defaultText = GetComponent().text; } public void Check() { foreach (string word in delWord) { GetComponent ().text = GetComponent ().text.Replace(word, ""); } if (GetComponent ().text.Length == 0) { GetComponent ().text = defaultText; } } }