k-maのメモ帳。(ゲーム雑記)

steamでゲームをするのが趣味です。記事は主に自分用メモです。

Unity6製ゲームをXUnity Auto Translatorで自動翻訳したけど、日本語表示できるTMPのアセットバンドルが無かったので自分で作ったメモ。

XUnity Auto Translator(以下XUnityAT)でUnity6製ゲームを自動翻訳しても文字が表示されないので対応したときのメモ。
※XUnity Auto Translatorの使い方についての記事ではありません。

状況:XUnityATで翻訳はできているが、表示がうまくいかない。
(_AutoGeneratedTranslations.txtには出力されているが文字が□□(豆腐)OR表示なし)

arialuni_sdf_u20xxで使用されているTextMeshProとunity6で実装使用するTextMeshProでバージョンが違う?とあたりを付ける。
(成功したあともversionのwarningがログに出力されていたけど日本語表示できたからよし)

githubのフォーラムでUnity6で作ったというのがあったので入れてみたけど日本語の文字がほとんど入っていなかった。「□□確□□が□」←こんな感じ。

一部だけど表示できたので日本語文字をきっちり入れて作ればいけるはず、これはつくるしかない。

Unityの開発環境は過去に2時間くらい遊んだだけなのでまぁまぁ苦労したのでメモを残す。

作業概要

0.XUnityATで翻訳を試みるも失敗。
 翻訳はできている(_AutoGeneratedTranslations.txtには出力)のに文字表示されない。
 arialuni_sdf_u20xxが対応していない症状。

 超ざっくりした手順。
 Unity6開発環境のインストール→TMPアセット作成→アセットのバンドル化。
 このアセットバンドルがarialuni_sdf_u20xxに相当するものになります。

1.ゲームに使用されているUnityのバージョンを確認。

 BepInExのLogOutput.logより。

[Info   :   BepInEx] Running under Unity v6000.0.24.1178165

 最近翻訳できなかったゲームをいくつか確認したところv6000~のバージョンであることを確認。
 Unity6に対応していないならUnity6で作ればいいじゃない。
 ※v20xx~なら原因は別にあるのでこの記事では解決できない。

2.Unity6をインストールする。

 Unity公式よりUnity Hubをインストール。
unity.com
 Unity HubメニューのInstalls→Install Editor→Official releasesからUnity6をインストール。
 (自分はUnity6.2で実施)

3.Unity6で日本語入りのTextMeshProのアセットを作る。

 Unity HubメニューのProjects→+New project
 「Universal 3D」を選択し適当にプロジェクト名つけて+Create project

 (ここからプロジェクトを開いて実作業)
 Assetsにフォントファイルを追加、ProjectのAssetsにエクスプローラーからファイルをドラッグ&ドロップ
 ※window下段の真ん中あたりに放り込め。
 今回はM PLUS 1pフォントのRegular「MPLUS1-Regular.ttf」を使用しました、ライセンスはSIL Open Font Licenseです。
 ※ゲーム実況などで使用する場合はライセンスをよく確認しましょう。
fonts.google.com

 TMPを追加、メニュー「Window」→「TextMeshPro」→「Font Asset Creator
 Font Asset CreatorとTMP Importerが開く。(初回はFont Asset Creatorが表示されないかも?)
 TMP Importerで「Import TMP Essentials」をクリック。
 (AssetsフォルダにTextMesh Proが追加されます。)

 Font Asset CreatorでFont Atlasを作成する。
 このあたりの知識がないのでXUnityAT本家?をぱくっt参考に作成。
Support custom fonts for TextMeshPro · Issue #57 · bbepis/XUnity.AutoTranslator · GitHub

Interesting to see you could get it working in a Unity 2017 game.

When I generate a font I usually use the following settings:

Source Font File: Arial Unicode MS Regular (arialuni.ttf). Noto Sans CJK might be a better choice for you, although I think arialuni does have most of the important Kanji.
Sampling Point Size: 40
Padding: 3
Packing Method: Fast
Atlas Resolution: 8192 x 8192 (yes, that's a big texture, but I am trying to include many languages as well)
Character set: Uncode Range (Hex) 0000-052F,2E80-2EFF,3000-4DBF,4E00-9FFF,AC00-D7AF
Render Mode: SDF16 / Distance Field 16
Usually takes round about half an hour to generate.

 Source FontにさきほどAsssetsに追加したフォントを選択。
 半角カナがないので、Hex指定末尾に",FF00-FFEF"を追加。
 (Hexの範囲は日本語以外も含まれていますがそのままでOK)
 他の項目はそのまま設定。
 ※Point Sizeは元のフォントに合わせ、調整したほうがきれいになる?と思う。
 
 一通り設定出来たら「Generate Font Atlas」をクリック。
 ※生成にそこそこ時間かかります。

 終わったら「Save」。(見当たらなければ下にスクロール)

4.TMPアセットからアセットバンドルを作る。

 UnitypackageのAsset Bundle Browserをインストール。
 メニュー「Window」→「Package Management」→「Package Manager」
 Unity6では検索してもなかったので、パッケージ名直打ちで追加する。
 Package Managerで左上の「+」→「Install package from git URL…」
 「com.unity.assetbundlebrowser」と入力し「Install」をクリック。

 「Window」→「AssetBundle Browser」
 AssetBundle Browserが開くのでwindowに作ったTMPアセットをドラッグ&ドロップ
 ※そのままSaveしていたら下段真ん中あたりに青字で「F」のアイコンがあるのでそれを放り込む。
 
 Buildタブを選択「Build」をクリック。

 ~\UnityData\[プロジェクト名]\AssetBundles\StandaloneWindowsに出力された末尾「sdf」のファイルが完成品です。
 ※ex「mplus1-regular sdf」

おまけ

 今回作成したアセットバンドルを置いておきます。

アセットバンドル
drive.google.com