コラム:文字セット


投稿日:2024年1月10日 | 最終更新日:2024年3月31日

フォントアセットの作成には、文字セットが必要

フォントアセットの作成には、収録する文字がどれなのか指定する必要があります。
フォントに収録する文字のリストなどは、フォント業界では「文字セット」と呼ばれることが多いようです。

TextMeshProに自動で設定できる文字セットは「ASCII(ASCII文字をすべて収録する)」など英語圏に特化したものしかありません。
そのため、日本語をはじめアジア圏の場合は文字セットを自作する必要があります。

フォントファイルから文字セットを作成する(推奨)

フォントファイル内にある文字のうち、Unityが利用できる文字を全て抜き出してそれをそのまま文字セットにします。
個人的にはこれがベターだと思っています。

・多くのフォントはJISやAdobeと同等の規格に従って文字を収録しているのでそれに頼ればいい。
  参考:「ゼロから学ぶ「フォントのしくみ」③:Std、Pro、Pr5、Pr6……フォントの文字セットとは?|Fontworks | フォントワークス公式note
・ゲーム用の日本語フォントファイルは多くが1万文字以下で、全部収録してしまっても消費リソース的にはあまり問題ない
・外国語のフォントであったとしても、適切な文字セットの規格などを気にしなくていい
・フォントファイル内にない文字を含まないので、フォントアセット作成時に出力されるエラーログがなく作成が速い
……という理由によります。

問題なのは、フォントファイルが収録している文字一覧をどうやって取得するかですが、
残念ながらTextMeshProの機能では用意されていないようです。
Font Asset Creatorの「Character Set」を「Custom Range」や「Unicode Range (Hex)」にして全てのUnicodeを範囲指定すれば理論上はすべての文字を収録できるはずですが、
実際にはエラー出力が莫大な数になってしまうせいか、何時間たってもフォントの作成が終わらなくなってしまうようです。

なので、現状はエディタ拡張プログラムをするなどして何らかのツールを自作するか、
アセットストアなどでツールを探す必要があります。

例) 「宴」のChatacterCollectionGenerator

ゲーム中で使用している文字から文字セットを作成する

ゲーム中使用する文字を抜き出して利用するというパターンです。
もしくは「ひらがなだけ」とか「ひらがな+常用漢字」のように、ある程度絞ったリストを自分たちで決めてそれを利用するというパターンも含まれます。
昔のゲーム開発での基本的な手法ですが、今でもシビアにリソースを絞りたい場合や、フォントの種類を多くするぶん一種類当たりのサイズを減らしたいときなどに有効です。
最初からローカライズを想定しているなどで、テキストデータを管理する設計にしている場合はそれを流用できるのですが、
そうではない場合は、プロジェクトごとに専用のエディタ拡張プログラムを書いたりなどする必要があります。
例) 「宴」のScenario Character Validator

文字化けしてないかをチェックしたり、足りない文字を追加するごとにフォントアセットを作り直したりする必要も出てくるので、小規模な開発ではあまり現実的ではないかもしれません。

汎用的な規格に従って文字セットを作成する

一般的によく使われるとされる文字をまとめた規格があるので、それを利用します。
フォントファイル内の文字のうち実用的なものだけに絞ってフォントアセットのサイズを抑える目的でも利用できます。

JIS漢字コード

日本には、古くからJIS漢字コードと呼ばれる規格があります。
ですが規格が古い(ネットどころかデジタル出版以前)こともあり、よく使われる文字が抜けていたりと実用には少し難があります。

Adobeの文字コレクション

Adobeの定めた規格です。実際のフォント業界ではこちらを基本としていることが多いようです。
詳細な仕様や規約などは、GitHubにも公開されています。
ただし、規格としての詳細なドキュメントやデータファイルはあるのですが、単純な文字一覧などはありません。
なので、TextMeshProで使える形にコンバートしたファイルを以下にまとめました。
オリジナルはグリフ(字体、文字の見た目)の規格なので、文字一覧にしたものとは数が違っています。
また、多言語対応するときのために日本語以外の文字セットについてもまとめました。
以下では、日中台韓の規格を一覧表にました。

Adobe-Japan1

日本語用の規格です。
公式GitHub:https://github.com/adobe-type-tools/Adobe-Japan1/blob/master/README-JP.md

コレクション名 追加文字数 追加文字ファイル 累計文字数 累計文字ファイル フォントの記号 補足
Adobe-Japan1-0 7849 Adobe-Japan1-0_add.txt 7849 Adobe-Japan1-0.txt JIS第1水準・第2水準漢字が含まれる
Adobe-Japan1-1 30 Adobe-Japan1-1_add.txt 7879 Adobe-Japan1-1.txt
Adobe-Japan1-2 348 Adobe-Japan1-2_add.txt 8227 Adobe-Japan1-2.txt
Adobe-Japan1-3 0 Adobe-Japan1-3_add.txt 8227 Adobe-Japan1-3.txt Std/StdN 標準的な日本語の文字が含まれる
Adobe-Japan1-4 1951 Adobe-Japan1-4_add.txt 10178 Adobe-Japan1-4.txt Pro/ProN 商用印刷を想定。JISの第三、第四水準の実用的な文字が含まれる。
Adobe-Japan1-5 3660 Adobe-Japan1-5_add.txt 13838 Adobe-Japan1-5.txt Pr5/Pr5N JISの第三、第四水準の使用頻度が低い文字も含まれる。
Adobe-Japan1-6 2053 Adobe-Japan1-6_add.txt 15891 Adobe-Japan1-6.txt Pr6/Pr6N JIS補助漢字などさらに使用頻度の低い文字を含む。
Adobe-Japan1-7 1 Adobe-Japan1-7_add.txt 15892 Adobe-Japan1-7.txt ㋿の合字1字追加のみ

Adobe-GB1

簡体字の規格です。簡体字は中国本土などで使用されています。
公式GitHub:https://github.com/adobe-type-tools/Adobe-GB1

コレクション名 追加文字数 追加文字ファイル 累計文字数 累計文字ファイル
Adobe-GB1-0 7783 Adobe-GB1-0_add.txt 7783 Adobe-GB1-0.txt
Adobe-GB1-1 2201 Adobe-GB1-1_add.txt 9984 Adobe-GB1-1.txt
Adobe-GB1-2 12339 Adobe-GB1-2_add.txt 22323 Adobe-GB1-2.txt
Adobe-GB1-3 0 Adobe-GB1-3_add.txt 22323 Adobe-GB1-3.txt
Adobe-GB1-4 6675 Adobe-GB1-4_add.txt 28998 Adobe-GB1-4.txt
Adobe-GB1-5 1220 Adobe-GB1-5_add.txt 30218 Adobe-GB1-5.txt
Adobe-GB1-6 288 Adobe-GB1-6_add.txt 30506 Adobe-GB1-6.txt

Adobe-CNS1

繁体字の規格です。繁体字は台湾、香港などで使用されています。
公式GitHub:https://github.com/adobe-type-tools/Adobe-CNS1

コレクション名 追加文字数 追加文字ファイル 累計文字数 累計文字ファイル
Adobe-CNS1-0 14571 Adobe-CNS1-0_add.txt 14571 Adobe-CNS1-0.txt
Adobe-CNS1-1 6278 Adobe-CNS1-1_add.txt 20849 Adobe-CNS1-1.txt
Adobe-CNS1-2 0 Adobe-CNS1-2_add.txt 20849 Adobe-CNS1-2.txt
Adobe-CNS1-3 2479 Adobe-CNS1-3_add.txt 23328 Adobe-CNS1-3.txt
Adobe-CNS1-4 173 Adobe-CNS1-4_add.txt 23501 Adobe-CNS1-4.txt
Adobe-CNS1-5 123 Adobe-CNS1-5_add.txt 23624 Adobe-CNS1-5.txt
Adobe-CNS1-6 68 Adobe-CNS1-6_add.txt 23692 Adobe-CNS1-6.txt
Adobe-CNS1-7 23 Adobe-CNS1-7_add.txt 23715 Adobe-CNS1-7.txt

Adobe-KR

韓国語の規格です。
公式GitHub:https://github.com/adobe-type-tools/Adobe-KR

コレクション名 追加文字数 追加文字ファイル 累計文字数 累計文字ファイル
Adobe-KR-0 3062 Adobe-KR-0_add.txt 3062 Adobe-KR-0.txt
Adobe-KR-1 1578 Adobe-KR-1_add.txt 4640 Adobe-KR-1.txt
Adobe-KR-2 6814 Adobe-KR-2_add.txt 11454 Adobe-KR-2.txt
Adobe-KR-3 280 Adobe-KR-3_add.txt 11734 Adobe-KR-3.txt
Adobe-KR-4 137 Adobe-KR-4_add.txt 11871 Adobe-KR-4.txt
Adobe-KR-5 357 Adobe-KR-5_add.txt 12228 Adobe-KR-5.txt
Adobe-KR-6 360 Adobe-KR-6_add.txt 12588 Adobe-KR-6.txt
Adobe-KR-7 5043 Adobe-KR-7_add.txt 17631 Adobe-KR-7.txt
Adobe-KR-8 3627 Adobe-KR-8_add.txt 21258 Adobe-KR-8.txt
Adobe-KR-9 392 Adobe-KR-9_add.txt 21650 Adobe-KR-9.txt