旧Textで作られたものをTextMeshPro対応に変換


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

概要

宴3以前のLegacyText(旧Text)で作ったものをTextMeshPro対応に変換する手順をまとめました。
変換ツールは、宴4.0.2以降が必須です。

注意点

宴4でもLegacyTextを使う機能はそのまま使えるので、無理にTextMeshPro対応をする必要はありません。
これらの手順は完全な変換を保証するものではありません。
Unity公式のLegacyTextとTextMeshProは互換性を意識したinterfaceもなく、自動変換する仕組みも提供されていないためです。
宴側で自動変換ツールを作成しましたが、独自に手を加えていた箇所などは対応しきれないため、完全に自動変換できるとは限りません。
また、宴以外のアセットや自作のコンポーネントを使っている場合は、それらもTextMeshProに対応している必要がありますので、その点も注意してください。
また、LegacyTextと違ってTextMeshProは基本的にはあらかじめ用意したフォントファイルやフォントアセットの文字しか表示できないため、特にローカライズを意識する場合は注意して下さい。
(宴がデフォルトで用意しているフォントはアルファベット系と日中台韓のものです)

旧来のテキストタグとTextMeshPro対応のタグは完全に互換性があるわけではありません。
詳細はこちらを参照してください。

宴で設定してあったTextSettings機能は全てTextMeshProの機能として設定しなおす必要があります。
ほとんどのケースではTextMeshPro標準のままでも違いはないと思いますが、手動調整が必要な場合は、下記の変換作業の後自動改行・禁則処理についてや、文字間を無視する特殊な文字についてを参考に調整をしてください。

準備

バックアップ


シーンを破壊してしまうおそれもあるので、必ず作業前にプロジェクトのバックアップを取っておいてください。

バージョン管理ツールなどを使っていない場合であっても、以下の要領でバックアップをとっておいてください。
Unityプロジェクトのフォルダを丸ごとコピーすると巨大サイズになりがちなのですが
「Assets」「Pcakges」「ProjectSettings」と「UserSettings」をコピーするなどして取っておくようにしてください。

「Library」「Logs」「Temp」などはUnityが自動生成するキャッシュファイルやログ、一時ファイルなどの置き場所です。
(削除しても自動生成されますが、再生成には長時間かかることもあります)

TextMeshProのセットアップ

TextMeshProの初回セットアップが終わっていない場合は、セットアップ作業が必要になります。
Window > Text Mesh Pro > Import TMP Essential Resources を開いてください。


「Import TMP Essentials」をインポートして初回セットアップを終わらせてください。
すでにセットアップが終わっている場合は、ボタンがグレーアウトしています。

フォントアセットの用意

フォントアセットの用意

メニューバーの「Tools>Utage>New Project」から、新規プロジェクト作成ツールを開きます。

プロジェクト名

「Input New Project Name」に、プロジェクト名を設定します。
ただし、既に作成済みのプロジェクトがAssesフォルダ直下にある場合、同じ名前のプロジェクトが作れません。
その場合、いったん作成済みのプロジェクトフォルダの名前の方を少しだけ変えるか、どこか別のサブフォルダにいったん移動しておきます。

アセットだけを作成する

「Type」を「CreateScenarioAssetOnly」にすると、シーンファイルを作成せずに、フォントアセットなどのアセットのみが作成されます。

作成されたアセットのうち必要なものだけを自分のプロジェクトに移動

「Create」ボタンを押すと、アセットが作成されます。(数十秒の時間がかかります)
・ルビ用のプレハブの「Prefafabs/UI/Ruby」
・フォントアセットのある「Fonts & Materials」フォルダ
この二つを自分のプロジェクトフォルダに移動させます。

移動が終わったら、その他のアセットは必要ありませんので削除してかまいません。
元のプロジェクトフォルダ名を変更していたり、移動している場合はもとに戻してください。

フォントファイルを変える場合

上記の手順で作成できるのは、宴の用意してあるNotoSansというフォントです。
別のフォントファイルを使う場合は、別途フォントアセットを作成する必要があります。
フォントアセットの作成はTextMeshPro公式のツールを使う必要がありますが、ちょっと難しいです。
そこで、宴の補助ツールなどを使って作成する手順をこちらにまとめてあります。
TextMeshPro用フォントアセットの作成

使用していたフォントファイルが一種類だけであれば、いったんさきほど作成したNotoSansのフォントアセットで変換作業を行った後、
フォントアセットの変更ツールを使うということも可能です。
複数フォントファイルを使っていた場合は、フォントアセットを作成したのち、必要に応じてプレハブとアウトライン用のマテリアルをそれぞれに作成してください。

変換作業

UtageForTextMeshProコンポーネントを追加

AdvEngineオブジェクトに、UtageForTextMeshProコンポーネントをAddComponentします。
UtageForTextMeshProは、シナリオのテキストの構文解析をTextMeshPro対応にするためのコンポーネントです。

自動化ツール

自動変換ツールは、対象のプレハブやシーン内のすべてのLegacyText系コンポーネントを、TextMeshPro系のコンポーネント交換します。
シーンやプレハブの「一部だけLegacyのままにする」といったことはできませんので、ご注意ください。

Tools/Utage/Tools/Legacy To TextMeshPro Convert を選択し、自動変換ツールを開きます。

フォントアセットの設定

「Fonts Asset Settings」に、フォントの情報を設定します

 名前 内容
Legacy Font Asset 旧テキスト用のフォントアセット(フォントファイル)を設定します。
通常LegacyRuntime(Unity2021以前ではArialと表記される)です。
自分で用意したフォントファイルを使っている場合はそれを設定してください
Font Asset TextMeshPro用のフォントアセットを設定します。
先ほど作成した「Fonts & Materials」フォルダ以下の「プロジェクト名NotoSans0 SDF」フォントアセットか、
自分で作成した任意のフォントアセットを設定します。
OultLine Material アウトライン(太字)表示用のマテリアルを設定します。
先ほど作成した「Fonts & Materials」フォルダ以下の「プロジェクト名NotoSans0 SDF Outline」マテリアルか、
自分で作成した任意のフォントアセットを元にしたマテリアルを設定します。
Ruby ルビ用のプレハブを設定します。
先ほど作成したルビ用のプレハブを設定するか、
自分で作成した任意のフォントアセットを設定したルビ用のプレハブを設定します

複数のフォントファイルを使っていた場合は、「Legacy Font Asset」と、「Font Asset」・「OultLine Material」・「Ruby」がちゃんと対応するように設定してください。

プレハブの変換

 名前 内容
Prefab Assets 変換対象のUIプレハブを設定します。通常「プロジェクト名/Prefabs/UI」フォルダ以下にあります
Check Prefabs 設定したプレハブ内に古いテキスト系コンポーネントを使っている箇所があればWarningとしてデバッグ出力します。
Fonts Asset Settingsに設定されていないフォントファイルがあった場合は、エラー出力します
Convert Prefabs プレハブをTextMeshPro対応に変換します

「Prefab Assets」を設定したのち、「Check Prefabs」でエラーが出ないかを確認し、「Convert Prefabs」でプレハブを変換します。
変換後「Check Prefabs」でWarningなどがでないかチェックしてください。

シーンの変換

 名前 内容
Scene 変換対象のシーンを設定します
Check Scene 設定したシーン内に古いテキスト系コンポーネントを使っている箇所があればWarningとしてデバッグ出力します。
Fonts Asset Settingsに設定されていないフォントファイルがあった場合は、エラー出力します
Convert Scene シーンをTextMeshPro対応に変換します

シーンの変換の前に、先にプレハブの変換を終わらせておいてください。
「Scene」を設定したのち、「Check Scene」でエラーが出ないかを確認し、「Convert Scene 」でシーンを変換します。
変換後「Check Scene」でWarningなどがでないかチェックしてください。

自作コンポーネントがある場合

自動変換ツールは、宴のコンポーネントと、UnityのLegacyTextとTextMeshProUGUIにしか対応していません。
その他のコンポーネントがある場合は、自力で対応してください。

UIコンポーネントをoverrideしていた場合 

宴のUIコンポーネントを継承していた場合、それも自動変換対象にはなりません。
宴のTextMeshPro対応コンポーネントは、Legacy Text用のUIコンポーネントを継承しているものなので、
継承元のプログラムをTextMeshPro対応コンポーネントのほうに変えるだけででプログラムの対応は可能だと思います。

サンプル

public class SampleSaveLoadItem : UtageUguiSaveLoadItem
public class SampleSaveLoadItem : UtageUguiSaveLoadItemTMP

基本的には、上記のように継承元のクラス名にTMPと接尾辞をつけるだけでTMP用のコンポーネントになります。
ただし、プレハブアセットやシーンのインスペクター上で、TextMeshProUGIなどのコンポーネント参照設定のしなおしは必要になると思います。

変換ツールが行っていること

自動変換の際に、行っていることは以下の通りです。手動で変更を行う場合の参考にしてください。
ソースコードは、Assets/Utage/Editor/Menu/Tools/LegacyToTextMeshPro/ フォルダ以下にあります。

TextコンポーネントをTextMeshProUguiに交換

コンポーネントをつけかえて、テキストやフォントサイズや行間、アライメントなどの互換性のある情報をコピーします。
フォントアセットは、Fonts Asset Settingsを元にして設定します。
RitchOutlineコンポーネントやNovelTextなど、Textの拡張コンポーネントがある場合は、それに対応したTextMeshPro設定をします。

UguiLocalizeTextSettingコンポーネントをUguiLocalizeTextSettingTMPに交換

コンポーネントをつけかえて、互換性のある情報をコピーします。

宴のTextコンポーネントを扱うコンポーネントをTextMeshPro対応コンポーネントに交換

宴のUIコンポーネントで、TextMeshProに対応したものは基本的にはコンポーネント名にTMPという接尾辞がつく形になっています。
二つのコンポーネントの違いはインスペクター上で表示するTextコンポーネントがどっちの種類かというだけの場合がほとんどです。

Legacy Text用のUIコンポーネント例

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

以下はその一覧表です。

 旧コンポーネント名 TextMeshPro対応コンポーネント名
AdvUguiBacklog AdvUguiBacklogTMP
AdvUguiMessageWindow AdvUguiMessageWindowTMP
AdvUguiSelection AdvUguiSelectionTMP
SystemUiDebugMenu SystemUiDebugMenuTMP
SystemUiDialog1Button SystemUiDialog1ButtonTMP
SystemUiDialog2Button SystemUiDialog2ButtonTMP
SystemUiDialog3Button SystemUiDialog3ButtonTMP
SystemUiFramerateChanger SystemUiFramerateChangerTMP
UtageUguiCgGalleryItem UtageUguiCgGalleryItemTMP
UtageUguiSceneGalleryItem UtageUguiSceneGalleryItemTMP
UtageUguiSoundRoomItem UtageUguiSoundRoomItemTMP
UtageUguiLoadWait UtageUguiLoadWaitTMP
UtageUguiSaveLoadItem UtageUguiSaveLoadItemTMP

自動変換時には、プレハブやシーン内のこれらのコンポーネントを交換します。
Text系コンポーネントが参照設定されていた場合、交換されたTextMeshPro系のコンポーネントを設定しなおします。

交換したコンポーネントの参照を設定しなおし

古いコンポーネントを参照設定していたコンポーネントに、新しくしたコンポーネントを設定しなおします。