読者です 読者をやめる 読者になる 読者になる

Webエンジニアの備忘録

およそ自己の作業メモとして残しております。

uGUIのキーボード入力ができない

AndroidiOSでのキーボード入力を念頭にアプリ開発を行っていたところ、uGUIのInputFieldにて躓くことが多かったのでメモしておきます。

スタンダードな実装

f:id:tak_taniguchi:20150331113804p:plain

  • 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にて実装しました。

f:id:tak_taniguchi:20150331120844p:plain

こちらだと、改行コードやタブが入り込んでしまうことがあり、今回の仕様でははじきたかったので、スクリプトをかませました。

f:id:tak_taniguchi:20150331121210p:plain

  • 改行やタブは削除する
  • 未入力の際は規定値に戻す
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;
        }
    }
}