Unity:多言語のフォントはUnicode領域で作ろう

タイトル装飾

Unity:多言語のフォントはUnicode領域で作ろう

 

Unity:多言語のフォントはUnicode領域で作ろう

Unityで多言語のフォントを作成することに困ったことがありますか?
どんな文字が必要か?作成した文字で足りるかどうか?

本記事では、CJK(中国語・日本語・韓国語)を例にして、Unicode領域でフォントの作成について紹介していきます!

目次

なぜUnicode領域で?

フォントリソース管理に便利:フォールバックフォント

CJKの文字に適切なUnicode領域は?

Font Assetを作ろう!

参考サイト

なぜUnicode領域で?

Unicode領域でFont Assetsを作成するには様々なメリットがあります。

  • Unicodeブロックには重なりがない、それぞれ単一のブロック名を持つ
  • 範囲で仕様文字を決めるとフォントの漏れが少なくなる
  • リソース管理に便利

そのため、必要な文字セットを明確に指定しやすく、漏れやダブりを防ぐことができます。

フォントリソース管理に便利:フォールバックフォント

TextMeshPro の Font アセットには Fallback Font Assets という設定があります。
一つのフォントアセットに文字数が制限されて、一回作ってフォントが足りない場合があります。しかも、一つのファイルでは容量が大きくなるため、プロジェクトのリソース管理に好ましくありません。

加えて、別のフォントアセットも追加できるので非常に便利です。

CJKの文字に適切なUnicode領域は?

さて、本題に入りましょう!

まずもっとも文字数が多いCJK共通領域から確認し、そのうえで日本語・韓国語の追加文字の差分を見ていくのが効率的です。

ASCII

0000-007F

128 個

英語、数字

一般句読点

2000-206F

73 個

英語の記号

全角・半角

FF00-FFEF

240 個

数字、確固

CJK統合漢字

4E00-9FFF

20,992 個

普通に使用されている文字

CJK互換漢字

F900-FAFF

512 個

中国外の文字

CJKの記号及び句読点

3000-303F

64 個

CJKの記号

CJK統合漢字拡張A

3400-4DBF

6,592 個

珍しい文字

CJK統合漢字拡張B

20000-2A6DF

42,720 個

珍しい・古い文字

CJK統合漢字拡張C

2A700-2B73F

4,160 個

一部は普通に使われていない文字

CJK統合漢字拡張D

2B740-2B81F

224 個

珍しい・古い文字

CJK統合漢字拡張E

2B820-2CEAF

5,776 個

珍しい・古い文字

CJK統合漢字拡張F

2CEB0-2EBEF

7,473 個

珍しい・古い文字

CJK統合漢字拡張G

30000-3134F

4,944 個

珍しい・古い文字

CJK統合漢字拡張H

31350-323AF

4,192 個

珍しい・古い文字

CJK統合漢字拡張I

2EBF0-2EE5F

624 個

珍しい・古い文字

CJK統合漢字拡張J

323B0-3347F

4,304 個

珍しい・古い文字

非常に多いですね…
ただし、この表に書いてある領域には中国語の文字がカバーされています。後は日本語と韓国語の差分です。

日本語は以下の表です。

ひらがな

3040-309F

109 個

カタカナ

30A0-30FF

96 個

韓国語は以下の表です。

ハングル音節文字

AC00-D7AF

11,184 個

ハングル字母

1100-11FF

256 個

ハングル互換字母

3130-318F

96 個

ハングル字母拡張A

A960-A97F

32 個

ハングル字母拡張B

D7B0-D7FF

80 個

これで以上です。
さて、上記の表で全言語に文字を作るのはかなり大変なので、各言語のFont AssetsとFallback Font Assetsをどう管理すればいいか、実際にFont Assetを作成していきましょう。

Font Assetを作ろう!

Font Asset Creator は Window > TextMeshPro > Font Asset Creator で開きます。

まずは、基本設定です。プラットフォームによって設定が異なりますが、Windowsの場合は以下を参照して問題ないと思われます。

Sampling Point Size:       48
Padding:                          4 px ※必ずSampling Point Sizeの10%で設定する
Packing Method:             Fast
Atlas Resolution:             8192×8192 ※iOS、Android対象は必ず4096×4096以下
Character Set:                 Unicode Range (Hex)

 📝メモ:Sampling Point Size 48 という設定は解像度と描画パフォーマンスのバランスが良く、ゲーム用途での実績が多いため今回の推奨値として紹介しています。

設定が完了したら、Source Font にて作りたいフォントデータを入れましょう。
今回使用するフォントは Source Han Serif です。

Atlas Resolution(アトラス解像度)を大きくすると、アトラス画像に収録できる文字数が増えます。逆に小さく設定する場合は、Unicode領域ごとにフォントアセットを細かく分ければ問題ありません。
アトラスとは、フォント文字の画像を1枚のテクスチャにまとめたものです。複数のアトラスに分割して管理することで、文字漏れを防げるだけでなく、ビルドサイズ削減や差分パッチ配信(フォント更新)にも役立ちます。

上記の設定を参考にすれば、1つのアセットに多くの文字をまとめられます。

中国語(繫体字・簡体字両方)は以下になります。

SDF

CJK統合漢字

4E00-9FFF

フォールバック1

英語、一般句読点、CJKの記号及び句読点、全角・半角

0000-007F,2000-206F,3000-303F,FF00-FFEF

フォールバック2

CJK統合漢字拡張A-J

3400-4DBF,20000-2A6DF,2A700-2B73F,2B740-2B81F,2B820-2CEAF,2CEB0-2EBEF,30000-3134F,31350-323AF,2EBF0-2EE5F,323B0-3347F

日本語は、英語、記号、各言語の文字、一部の漢字 という認識で作成すれば問題ありません。

SDF

CJK統合漢字

4E00-9FFF

フォールバック1

ASCII、一般句読点、CJKの記号及び句読点、ひらがな、カタカナ、CJK統合漢字拡張A、全角・半角、CJK互換漢字

0000-007F,2000-206F,3000-303F,3040-309F,30A0-30FF,3400-4DBF,F900-FAFF,FF00-FFEF

韓国語は中国語の文字が含まれていないのでこのようになります。

SDF

ASCII、一般句読点、ハングル音節文字、全角・半角

0000-007F,2000-206F,AC00-D7AF,FF00-FFEF

それでは、Unityを開いてFont Assetsを作っていきましょう!TextMeshPro のインポートも忘れずに!

上記に分けたグループごとに設定し、フォントを作成するとこういうファイルができます。

これで、日本語と中国語のフォールバックフォントを設定していきます。

最後に作成したフォントを確認していきましょう。
確認用の文章は、ChatGPTに考えてもらいました。


最後に

多言語対応で問題になりやすいのは「フォントの不足」「ビルド容量」「管理コスト」の3点です。

Unicode領域に基づいてFont Assetを分割し、Fallback Fontを設定しておけば、これらを同時に解消できます。

本記事の領域表と設定例を活用することで、CJKタイトルでも安定したフォント表示環境を構築可能です。

参考サイト

https://www.unicode.org/charts/
https://en.wikipedia.org/wiki/CJK_Unified_Ideographs
https://symbl.cc/en/unicode/blocks/cjk-radicals-supplement/
https://stackoverflow.com/questions/1366068/whats-the-complete-range-for-chinese-characters-in-unicode
https://character-table.netlify.app/korean/#unicode-ranges

 

作者
  N.P
  PG

目次

目次を生成中...