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

意味悲鳴

PythonとかUnityとか.技術ブログでしたが,研究ブログにシフトしました.

UnityのInputFieldについて

C# Unity

いろいろあってタイピングソフトっぽい何かを作成しているんですが,その関連でもやもやしまくった部分があったので書いておきます.

hiyotama.hatenablog.com

このページから引用させていただくとですね.

Line Typeは、行の設定ができます〜Single Lineは一行しか認められず、Multiple Lineは複数行書くことができます〜Multiple Line Submitのほうの改行方法はよく分からないのですが、Multiple Line Newlineのほうはreturnキーで改行できました〜 日本語入力はMultiple Line Newlineを選択しなければできないという点です〜ご注意下さい〜

これ,どうやら漢字変換→確定のEnterが原因みたいです. ただ,私が今回開発していた場合は1行でEnter押したらそのままスパッと入力が決まってほしかったので,このSingle Lineを使いたかったのです.で,使ってみるじゃないですか.そしたら,入力自体はできているんだけど,違うところに入力されていたという罠が.

   public void EndEdit(){
        Debug.Log(_inputField.text);
        Debug.Log(_inputField.textComponent.text);
    }

このコードで文字列を入力してみると,こんな感じになります.

f:id:zyusou:20170113021610p:plain

alphabet,要するに半角英字に関しては両方に入力がされています.が,ひらがなとカタカナ,全角文字に関しては,InputField.textComponent.textにしか入力されていません.漢字に関しても同様でした.

f:id:zyusou:20170113025737p:plain

地味に恐ろしいことですが,IME経由で半角英数字を入力した場合は全角文字と同様になってしまうようです.あまり考えられないかもしれませんが,なんか気持ち悪いですね. というわけで,UnityのInputFiledについてでした.ひょっとしたら常にInputField.textComponent.textの方を使ったほうが良いかも知れませんね.

ちなみに,なんでこんなことをする必要があったかというと,カタカナ以外の文字列を入力したことを確認したかったからです.assertion自体はUnityのInspector経由で設定ができるらしいのですが(Content Typeだかなんだか),日本語,というかマルチバイト文字に関しては対応していないようで,故にこんなことをする羽目に.面倒くさいし時間かかったしほんともう疲れた…….