宴のTextMeshPro対応


投稿日:2023年12月3日 | 最終更新日:2024年5月22日

宴4からテキスト表示とUI表示のすべてをTextMeshProで行えるようにしました。
宴3までの拡張プラグイン形式に関するドキュメントはこちらです。

TextMeshProについて

特徴

・端末が高解像の場合、テキスト表示もそれにあわせてほぼ劣化なく高精度に表示されます。
  元のサイズ
  高解像でもほぼ劣化がなく表示できます。

・描画速度が速い。(FPSを固定していないと早すぎるほどで、宴のスキップ機能などを使うと視認できないほど早くスキップされてしまうことがあります)
・アウトラインやシャドウのほか、多重アウトラインやベヘル、グラデーションなど多彩なテキスト効果を付けられる。

サロゲートペアをサポート

広く使われているデジタル文字の共通規格にUNICODEというものがあります。
UNICODEは16bitで始まったものの、全世界の文字を扱うには16bit(最大65,536)では足りないため、収まらない文字を扱うために拡張された仕組みがサロゲートペアです。
ペアとなっている2つのunicodeを一つの文字として扱う少し特殊なものです。
日本語では、(ホッケ)のような稀な漢字にも使われているほか、人名などでも使われることがあります。
従来は略字表記せざるを得なかったものも本来の漢字を表示できるようになります。

プログラム的には、サロゲートペアはstring内の「char2個で1文字となる」という形になるため、対応したプログラムをしないと文字数がズレるなどの不具合が起きたりします。
宴ではその点も考量してプログラムを更新しました。
また、Unityエディタ上ではまだサロゲートペア文字は表示できないようなので、インスペクター内やコンソールのDebugLogなどに正常に表示されないなどの不都合もあります。

TextMeshProのドキュメント

TextMeshPro自体はUnityの公式機能ですが、日本語ドキュメントがないので宴側で用意しました。
TextMeshProドキュメント以下にまとめてあります。

TextMeshProを使うための準備

リンク先のチュートリアルの項目を確認してください。
チュートリアル>Unityプロジェクトの作成>TextMeshProのセットアップ
チュートリアル>Unityプロジェクトの作成>Color Spaceの確認

宴のUIコンポーネントのTextMeshPro対応

宴4から、UI系のコンポーネントをすべてTextMeshProに対応しました。
宴のUIコンポーネントで、TextMeshProに対応したものは基本的にはコンポーネント名にTMPという接尾辞がつく形になっています。
Legacy Text用のUIコンポーネント例

TextMeshPro対応のUIコンポーネント例

二つのコンポーネントの違いは操作対象のTextコンポーネントがどっちかというだけの場合がほとんどです。

宴4から、宴の新規プロジェクト作成時における基本はTextMeshPro版のほうを使うようにしてます。
宴4でも「Legacy Text」版のほうはそのまま使えるようになっていますが、
既に旧Legacy Text用のコンポーネントで作成したシーンをTextMeshPro対応にしたシーンに入れ替えるのであれば、
Text系オブジェクトを更新するだけではなく、これらのUIコンポーネントも交換するようにしてください。
参考:旧Textで作られたシーンをTextMeshPro対応する

リッチテキストタグについて

宴のシナリオでは、TextMeshProタグと宴の独自タグを使用することができます。
詳細は、テキストタグを参照してください。

宴に用意されているデフォルトのフォントアセット

宴にはNotoSansフォントから作成したTextMeshProのSDFフォントアセットが用意されていいます。
基本的には各新規プロジェクト作成時に自動的に作成されるので、あまり意識する必要はないのすが、下記のその詳細を記述します。

フォント名 対応言語 収録文字数 グローバルを除いた文字数
NotoSans グローバル(英語などのアジア圏以外) 3053 -
NotoSansJP 日本語 16732 16203
NotoSansKR 韓国語 23174 22645
NotoSansSC 簡体字(中国本土) 30890 29906
NotoSansTC 繁体字(台湾、香港) 20745 18258

*文字数は独自計測です。

元となるフォントファイル

オリジナルのフォントファイルは、GoogleのNotoSansフォントです。
Utage/Fonts/Fontsフォルダ以下に、フォントファイルとそのライセンスがあります。

SIL OPEN FONT LICENSE

フォントのライセンスは、「SIL OPEN FONT LICENSE Version 1.1」というものです。
詳細はライセンス本文を読んでください。
有償無償問わず使ってよいものですが、基本的にはライセンスの表記や著作権者の表記が必要になります。
TextMeshProでフォントアセットを作った場合にも、このライセンスの条項に従う必要があるかは解釈が分かれるのですが、表記したほうが確実だと思います。
TextMeshPro公式が使っているフォントのライセンス(LiberationSans - OFL等)と同じものですので、詳しくはUnityに問い合わせてください。

使用文字

TextMeshProのフォントアセットを作成する際に使用する文字リストは、Utage/Fonts/CharacterCollectionsフォルダ以下にあります。

NotoSansは元のフォントに収録されているすべて文字がリスト化されています。
NotoSansJP、KR、SC、TCは、各フォントに収録されているすべて文字から、NotoSansに収録されている文字を省いたものがリスト化されています。
また、NotoSansJP Character Collection_0of2、NotoSansJP Character Collection_1of2のように、設定された最大文字数で分割された文字リストファイルも同梱されていて、実際にはこちらを使っています。

NotoSansに収録されていいない文字

代表的なものだと「≒」などごく一部の文字が表示できません。
普通に使う分にはほぼすべての文字が表示できますが、もし対応できない文字を表示する必要がある場合は、対応しているフォントファイルを探してきてフォントアセットを新規作成してフォールバックなどを追加設定してみてください。
NotoSansの各フォントが、指定した文字に対応しているかは、Webサイトのタイプテスターを使うとすぐに確認できます。
宴のシナリオデータ内で使用している文字がフォントアセットに収録されているか検証する場合は、Scenario Character Validatorを使ってください。
NotoSansの各フォントに収録されている文字はすべて収録しているので、同じフォントファイルを使うのであればダイナミックフォントで文字をランタイムで作成する保険をかける必要はありません。
TextMeshProの拡張機能として、OSに収録されているフォントを取得するという仕組みも準備中のようですので、将来的にはそちらは選択肢になるかもしれません。
OSフォントの仕組みは2023年現在ではTextMeshProのプレビューバージョンでしか使えない上に不安定なようです。

TextMeshProのフォントアセット

TextMeshProのフォントアセットは「Utage/Template/Template/Fonts & Materials」以下にあります。
実際には、宴の新規プロジェクト作成時にこれをコピーしたものが作成され、各プロジェクトの/Fonts & Materials以下に作成されます。

シーン内のUIコンポーネントに設定されているのは、「プロジェクト名NotoSans0 SDF」で、基本的にはこのフォントが使用するメインのフォントになります。
実際に使用する際には、NotoSansにNotoSansJPなどの各言語の文字を組み合わせて(フォールバックして)使う形になっています。
フォールバックには、新規プロジェクト作成時に設定した「Font Langugae」に対応した言語のフォントが設定されています。

フォントのローカライズ


日本語、簡体字、繁体字、韓国語でローカライズするときは、
「海」や「食」などのように、同じUNICODEであっても言語によって表示する文字が若干異なるものも数多くあるため、
単純に各言語のフォントをすべて設定するのではなく、言語によって設定するフォントを入れ替える必要があります。
宴にはそういった仕組みを組み込んであります。
使用方法については、こちらをご確認ください。