Utage4でのローカライズと文字入力について

131 views
Skip to first unread message

Unity太郎

unread,
Dec 19, 2023, 1:10:31 AM12/19/23
to 宴ユーザーグループ
 ・宴のバージョン:Utage 4.0.1
・UnityのバージョンとOS: 2022.3.14f1 Windows10

お世話になっております。
このたびUtage4がリリースされたとのことでさっそく新規プロジェクトで使わせていただいておりますが、今までUtage3を使っていたので、TextMeshProへの変化で苦慮しています。
Utage3のLegacyTextだととりあえずArialを入れておけばどんな言語でも表示できたのであまり困ることはなかったのですが、言語ごとにフォントを切り替えないと表示自体ができないことが多いTMPに切り替えたことで、Utage3までは発生しなかった不具合が出るようになりました。

具体的にはSendMessageでInputFieldから入力した文字の挙動についてです。
例えば名前入力に使っていたとして、タイ語で名前を入力した後にゲーム言語を英語表示に切り替えると、名前表示欄のTMPが英語フォントに切り替わり、英語フォントはタイ語の文字に対応していないため名前が文字化けして豆腐になってしまいます。
LegacyTextでInputしているため入力自体はどんな言語でも出来るのですが、表示がTMPなのでそこで文字化けが出てしまいます。
表示もLegacyTextにすれば良いのでは?と思いましたが、AdvUguiMessageWindowTMPのInspectorではNameTextProがTMPのアタッチしか受け付けないようになっておりました。

名前欄にLegacyTextを表示したい場合はどうすれば良いでしょうか?
また、LegacyTextへの置換以外に何か良い解決策があれば教えていただけると助かります。

お忙しいところ恐縮ですが、よろしくお願いいたします。

マッドネスラボ

unread,
Dec 19, 2023, 9:26:42 AM12/19/23
to 宴ユーザーグループ
根本的には、宴ではなくTextMeshProの仕様(つまりUnity公式の仕様変更)です。
対応するのがかなり難しい問題なのですが、場合に分けてお答えします。

●パターン1 名前表示にのみLegacyTextを使う
「AdvUguiMessageWindowTMP」も、内部ではLegacyTextも扱えるので、
・インスペクタービューをDebugモードで表示
・NameTextにLegacyTextを設定
・NameTextProにNoneを設定
とすると、LegacyTextのほうを表示するようになると思います。
ss_1978.png

または、AdvUguiMessageWindowTMPを継承したコンポーネントを独自定義しても良いかもしれません。

問題点:
AdvUguiMessageWindowTMPだけではなく、バックログ(場合によってはセーブデータなど)も同じ要領でLegacyText表示する必要があります。
また、Paramタグなどで本文に名前を表示をしようとした場合など、TextMeshProでのテキスト表示部分では文字化けが起きるようになってしまいます。



●その2 TextMeshProの対応フォントを増やす
対応する文字があらかじめわかっているのであれば、
その文字に対応したフォントファイルを用意して
TextMeshProのフォントを作って
それを使用するフォントのフォールバックに設定します。
実際にはフォントファイルの作成等も、TextMeshProのドキュメントを一見しただけではわからないような細かい調整が必要となります。
この辺の設定方法に関しては、後日宴のサイトにドキュメントを追加していこうと思っています。


問題点:
用意されていない文字は結局表示できない。
タイ語のフォントを用意したとしても、結局他の言語の文字は表できません。
また、フォントを追加すればそのぶんファイルサイズやメモリサイズをどんどん消費してしまうことになります。
Dyamicフォントを使えば、フォントファイルから動的にTextMeshProのフォントファイルを作成できるのですが、フォントファイル自体のファイルサイズとメモリ消費量が大きいのであまり解決にならないです。
なので、このアプローチはあまり現実的ではないと思います。



●その3 TextMeshProで用意されていないフォントも表示できるようにする
TextMeshProの3.2以降から、「Dynamic OS」というのが追加される予定のようです。
LegacyTextと同じように、アプリを実行中のOSが用意しているフォントファイルから文字を取得して、それらの文字を使用できるモードが追加予定のようです。

ss_1979.png

問題点:
TextMeshProの3.2はまだプレビューです。
「Dynamic OS」の機能が実際に使い物なるのか試してないので、使い方もわからないですが、
TextMeshProのドキュメントやフォーラムを見る限りはまだ未完成のようです。
Unityフォーラム上のUnity公式からの返信が長い間滞ってるので、Unityに直接問い合わせたりバグ報告するなりしたほうが速いかもしれません。



2023年12月19日火曜日 15:10:31 UTC+9 Unity太郎:

Unity太郎

unread,
Dec 19, 2023, 10:31:47 PM12/19/23
to 宴ユーザーグループ
ご返信ありがとうございます。
Debugモードなんてものがあったのですね。
無事に名前欄をLegacyTextにすることが出来ました。
……ですが仰る通り、テキスト中の名前などは豆腐化されたままだったので、名前欄だけLegacyTextに出来てもあまり意味がないことに気付きました……。

案2のTMPの対応文字を増やすというのはファイルサイズの肥大化もですが、今後新たな言語を追加していく可能性を考えるとあまりやりたくないですね。
フォントファイル作成、確かにややこしくて意図せぬ挙動をすることが多いので、ドキュメントを楽しみにしております。

案3のDynamic OSは「そうそう!まさにこれが欲しかった!」って感じの機能ですね。
まだ正式リリースされていないとのことですが、この機能を待って、リリースされたらUnityをアップデートして搭載するのが一番いい気がします。
それまではユーザーに気を付けて遊んでもらうくらいしかなさそうですね。
UnityがDynamic OSを急いで開発してくれるよう祈ることにします。

迅速なご返信ありがとうございました。
今後もUtage4のバージョンアップを楽しみにしております。
2023年12月19日火曜日 23:26:42 UTC+9 マッドネスラボ:
Reply all
Reply to author
Forward
0 new messages