【 Unity 】InputFieldでのサロゲートペア対策!
スポンサーリンク
サロゲートペアをご存知でしょうか?
端的に言うと「絵文字」といわれるものです。
このサロゲートペアと言うものはとても曲者です。
例えばInputFieldで文字数制限をしている場合、最後の方で「絵文字」を入力するとフリーズします。
これは「InputField.cs」の中身を見ると分かります。
この様な状態を回避するために以下のスクリプトを作成しました。
全体図
今回はTMP_InputFieldを継承していますが、通常のInputFieldでも問題ありません。
説明していきます。
初期化
Awake()ではデリゲート設定を行います。
文字数制限を保存
SetCharacterLimitでは、InputFieldのパラメーターで設定されている文字数制限を保存し、InputField側の文字数制限を無くします。
これによって先ほどの様な文字数制限をオーバーする際の不具合を防ぎます。
文字入力チェックを行う
validateInput()では入力された文字をチェックしています。
char.IsHigeSurrogate、char.IsLowSurrogateではサロゲートペアをチェックしています。
オブジェクトに設定
ヒエラルキーにInputFieldを設定したら、スクリプトを削除してこちらをアタッチしましょう。
Placeholderなどを設定すれば通常のInputFieldと同じ様に使用できます。