C#UnityのuGUIで入力できない文字をはじくために必要な知識をまとめました。はじめに文字コードの誕生と分岐Unicodeの誕生サロゲートペアUTF-8やUTF-16でUnicodeを文字コードに変換UnicodeとUTF-8の関係uGUIとサロゲートペアuGUIと結合文字ソースコード参考はじめにUnityのuGUIは、実はほとんど絵文字を表示することができません。囲み文字なども一部正確に表示できないものがあります。そのため、ユーザが自由に入力できる部分ではこれらの文字をバリデーションする必要があります。この記事ではこのようにuGUIで表示できない文字をはじく方法をまとめます。この実装を理解するための前提知識は意外と幅広いので、そのあたりも踏まえてまとめてみます。文字コードの誕生と分岐まず、そもそも文字コードとは?というお話からです。コンピュータはビットしか取り扱えないので、文字も二進数で表す必要があります。「01」は「あ」を表して「10」は「い」を表すというルールにすれば、文字を二進数で表せます。このようなルールを文字コードと呼びます。最初に生まれた文字コードはASCIIという、アルファベットと数字と基本的な記号だけを収録したものでした。その後、もっと日本語とかも入れたいよねって話になり、各国語の文字コードがそれぞれ勝手に作られていきました。その結果、「あ」を表すのにある文字コードでは「0001」、またある文字コードでは「1000」みたいな感じのカオスな状況が生まれました。(上記の文字コードの値はあくまで例です)Unicodeの誕生これではまずいので、同じ文字は同じコードを対応させよう、として生まれたのがUnicodeです。Unicodeによって、「この文字はこのコード」とちゃんと一意に対応付けられるようになりました。このUnicode自体は文字コードとはまた違うもので、U+の後に16ビットをくっつけた「U+FFFF」みたいな形式で表されます。これをコードポイントと呼びます。途中で全世界の文字列を表すには16ビットだときついよねって話になりました。漢字とかめっちゃ多いし。そこで、まだ使っていなかったUnicodeのある一定の範囲を「上位サロゲート」、また異なる一定の範囲を「下位サロゲート」として定め、上位サロゲートと下位サロゲートの組み合わせで1文字を表現することにしました。これにより、より多くの文字を表せるようになりました。UTF-8やUTF-16でUnicodeを文字コードに変換さて前述の通りUnicodeは文字コードではないので、実際に使う際にはコードポイントをコンピュータが理解できるバイト列に変換する必要があります。このルール(=文字コード)が色々あって、例えばUTF-8とかUTF-16とかがそれにあたります。UnicodeとUTF-8の関係さてUnityの文字コードはUTF-8なのでこれとUnicodeの関係についてもう少し深掘ります。UTF-8は、それがUnicodeのどの範囲を表すかによって、一文字を1バイト~4バイトの可変長で表します。UTF-8で3バイト以内で表せる範囲は、Unicodeでいうところのサロゲートペアを使ってない範囲のコードポイントです。漢字などは大体この3バイトの範囲に入っています。UTF-8において4バイトで表す範囲はUnicodeでいうとサロゲートペアを使って表した範囲になります。大半の絵文字などがこの範囲に入っています。uGUIとサロゲートペアさてここまでが非常に長い前置きです。こんな前置きをしたかというと、ずばりuGUIがサロゲートペアに対応していないためです。サロゲートペアを使った文字を入力されてもuGUIでは表示することができません。したがってuGUIではサロゲートペアを使う文字は入力できないようにする必要があります。uGUIと結合文字それとは別に、Unicodeには結合文字というものが存在します。結合文字は、「ある文字」と「それを修飾する文字」の二文字で一つの文字を表します。実は「1」は、「1」という文字と「対象を〇で囲んで修飾する文字」という二文字からできています。発音記号の上についている点(ダイアクリティカルマーク)なども結合文字の一部です。これらの結合文字は一部だけuGUIで表示できないものがあります。表示できるものもあるようですが、はじいてしまったほうが無難なので今回はこれもはじきます。ソースコードさて大変長くなりましたが、いよいよソースコードです。今回はInputFieldへの入力制御コンポーネントを作成しました。}}結合文字については3種類あるようなので、これらをすべてはじきました。»プロフィールUnityエンジニア。グラフィックスへの興味が強めです。Blur(渦巻ブラー)のポストエフェクトを実装する月別アーカイブはてなブログをはじめよう!halya_11さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。