強火で進め

このブログではプログラム関連の記事を中心に書いてます。

Input Filed に入力された絵文字を削除するコード


Unity の Input Field は今のところ絵文字などを正しく表示できません。

キャプチャ画像は Android のものですが iOS の場合にはそもそもユーザの入力やコピペが失敗します。
しかし、データを代入する方法では iOS でも入力可能なので iOS でも対策が必要です。

例) "aa🐶bb" を代入

inputField.text = "aa\ud83d\udc36bb";

表示結果はこうなります。

対応方法

今回の対応方法は絵文字が入力された場合には削除するという方法です。
絵文字はサロゲートペアな文字なのでサロゲートペアな文字を削除する事で実現可能です。

コードはこの様になります。

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class ValidateInputText : MonoBehaviour {
	InputField input;

	void Start() {
		input = GetComponent<InputField> ();
		input.onValidateInput += ValidateInput;
	}

	public char ValidateInput(string text, int charIndex, char addedChar) {
		if (char.IsSurrogate (addedChar)) {
			// サロゲートペアの場合には削除
			addedChar = '\0';
		}
		return addedChar;
	}
}