気ままなUnityエンジニアブログ

新米Unityエンジニアが送る解説アウトプットブログです。Twitter : @UjinUnity

MENU

【 Unity 】InputFieldでのサロゲートペア対策!

スポンサーリンク

f:id:Wojtek:20190518181227j:image

 サロゲートペアをご存知でしょうか?

端的に言うと「絵文字」といわれるものです。

このサロゲートペアと言うものはとても曲者です。

例えばInputFieldで文字数制限をしている場合、最後の方で「絵文字」を入力するとフリーズします。

これは「InputField.cs」の中身を見ると分かります。

この様な状態を回避するために以下のスクリプトを作成しました。

全体図

f:id:Wojtek:20190518182239p:plain

今回はTMP_InputFieldを継承していますが、通常のInputFieldでも問題ありません。
説明していきます。

 

初期化

Awake()ではデリゲート設定を行います。

文字数制限を保存

SetCharacterLimitでは、InputFieldのパラメーターで設定されている文字数制限を保存し、InputField側の文字数制限を無くします。

これによって先ほどの様な文字数制限をオーバーする際の不具合を防ぎます。

文字入力チェックを行う

validateInput()では入力された文字をチェックしています。

char.IsHigeSurrogate、char.IsLowSurrogateではサロゲートペアをチェックしています。

オブジェクトに設定

f:id:Wojtek:20190518183248p:plain


ヒエラルキーにInputFieldを設定したら、スクリプトを削除してこちらをアタッチしましょう。

Placeholderなどを設定すれば通常のInputFieldと同じ様に使用できます。