Blacksad Under the Skin の日本語化の方法 | ブリッツのブログ

ブリッツのブログ

模型とゲームの話が中心です。

SuzerainでTextmesh Proをを容易に日本語化できるようになったので、そのおさらいもかねて、こいつも日本語化してみます。

単に日本語化がしたいだけであればXUnity.AutoTranslatorで日本語化が可能です。

(ただしQTEで翻訳が追い付かないこともありますが…)

今回のポイントは2つ

①テキストメッシュで日本語が出せるようにする。

②日本語データの編集

今回の②はかなり難しいです。結構出来る人でないと難しいのではないかと思いますのでサラリとだけ触れることにします。代わりに①は今までの復讐もかねて丁寧にやっていこうと思います。

 

① 日本語を出力できるようにする。

このゲームは一部を除いて日本語が表示されます。推理の画面だけなぜか日本語が表示されません。ミスなのか、動き回るからやらなかったのかは不明です。

なので推理画面ではこのようになってしまいます。


この推理画面で使われているフォントは、GLSNECB SDF Atlas.tex です。

今回は、このフォントだけを修正することになります。

1)文字情報の用意

  4096*4096のテクスチャを使えば日本語全てを簡単に入れられるのですが、前回それではうまくいかなかったで、今回も安全にと言う事で2048*2048のテクスチャで行くことにしました。なので、必要な文字だけを入れることにします。

私はエクセルで日本語編集をしていますので、マクロを組んで使われている文字を抽出しました。

プログラムの流れとしては、65536の配列を用意し、

表示される全テキストを1文字ずつばらして、このUnicodeを配列にチェックしていきます。

全文字のチェックが終わったら、この配列にチェックが入っている文字が使用されている文字なので、

テキストに配列に入っている文字を出力します。

それをUnityに登録して使っています。今回は1800文字ほどありました。

これが、フォント作成画面です。

これをビルドします。

------------------

ビルドしたものをUABEAで開きます。sharedassets0.assetsに入っていました。

 

 

フォントはM+フォントを使っています。

Mplus1-Regular SDFのMonoBehaviourをExportDumpします。

Mplus1-Regular SDF Atlas(テクスチャ)の方PathIDをチェックしておきます。

UABEAはいったん終了です。

---------------------------------

次にUnityExでsharedassets0.assetsを開きます。

番号#10のMplus1-Regular SDF Atlas.texをExport With convertでDDS出力します。

(ファイル名:Mplus1-Regular SDF Atlas.tex.ddsで抽出されます)

出力したUnityEXを終了します。

---------------------------------

次にBlacksadのゲームの方のresources.assetsをUnityEXで開きます。

 

Search Nameで GLSNECB SDFと入力し Find Nextを押します。何回か押すと Texture2Dというテクスチャファイルが見つかります。番号が#301です。これを覚えておきます。

これをExport with convertでDDS形式で出力します。

次に、先ほどUnityから抽出したMplus1-Regular SDF Atlas.tex.ddsを今回抽出された、GLSNECB SDF Atlas.tex.ddsにリネームして、抽出されたものに上書きます。

上書きしたら、Import fileを押しresources.assetsに書き戻します。

 

 

次に、Serch Textを選択し、今回書き換えるGLSNECB SDFを入力しFind Nextをクリックします。

Serch Nameはファイル名を、Serch Textはファイルの中身を検索してくれます。

これで、GLSNECB SDFの位置情報(グリフ)ファイルである、MonoBehaviourが発見できました。

この番号#11018を覚えておきます。

これでUnityEXわ終わりです。

-----------------------------------

UABEAを起動し、ゲームのresources.assetsを読み込みます。

先ほどチェックした#11018を探します。

GLSNECB SDFのMonoBehaviourが見つかります。

 

これをExportDumpします。

--------------------------------------

ここからUnityのMonoBehaviourとゲームのMonoBehaviourとをマージしていきます。

まずUnityのMonoBehaviourをコピーして名前をNew開き、NEW_GLSNECB SDF-resources.assets-11018.txtにでもしておきます。

前から22行目、  0 int m_FaceIndex = 0までを削除します。

削除した場所に、ゲームのMonoBehaviourの前から21行目までコピーします。

出来上がったものです。1-21までがゲーム 22からがUnityのものになります。

(  Unity22行目 0 int m_FaceIndex = 0が無い事に注目して下さい。)

 

次に、GLSNECB SDF Atlas.tex.ddsを取り出すときにチェックした番号#301を

(ゲームのMonoBehaviourの同じ場所を見ても構いません。)

0 PPtr<Texture2D> m_AtlasTexturesの所にあるPathIDに記入します。(10→301)

 

(ゲームのMonoBehaviour)

 

   

(NEW_GLSNECB SDF-resources.assets-11018.txt)

 

注意:テキストメッシュのバージョンが1.5以上の場合5,6行目の赤線で消した部分があります。ゲームのMonoBehaviourと見比べて消しておいてください。(1.4.1で作ると入っていません。)

Blacksadは1.4.1で作られたのでしょう。

 

これで新しいMonoBehaviourは完成です。保存終了してください。

------------------------------------

出来あかったあたしいMonoBehaviour(NEW_GLSNECB SDF-resources.assets-11018.txt)をUABEAのPathID11018にImportDumpしてください。インポートされたらSizeの横に*が表示されます。

File-Saveで保存してください。

読み込んだresouces.assetsには上書きできませんので、注意して下さい。

UABEAを終了させてから、新しく作ったresouces.assetsをオリジナル(テクスチャだけ入れてある)resouces.assetsに上書きします。

これで日本語表示が完了です。

きれいに表示されるようになりました。

 

② 日本語テキストの作成

ここからは参考程度にお願いします。

(現実的にプログラム必須なので…)

まず、日本語がどこに入っているのかが見つかりませんでした。XentaxというサイトでStreamingAssets\assets_data内の、e590e30c-c004-447d-85fa-1b58d064aa98に入っていると見つけましたが、開いても文字らしきものがありませんでした。この状態でだいぶ長い間放置でした。ある日、UnityEXで開いてみたら?と思って開いてみると大当たりでした。

ここら辺はトライ&エラーと運ですね。

ちなみに、このファイルをUiityEXで開くには、

ファイルの種類をALLにしないと見えません。

--------------------------------------

Script.txtと言うファイルが抽出できるのですが、

中身はバイナリ混在で、純粋なテキストファイルではありませんでした。

これがバイナリ図です。(文字の少ないNEW GAME部分を表示)

 

1テキストのブロックの構造を説明します。

・言語は7言語(青色)

・言語コード(スペイン語は&H22 英語は&H0A その他はそれぞれ)

・文字数

・テキスト

・次の言語コード(英語&H0A)

と続きます。

 

簡単なものであれば、文字数を増やせばテキストも増やせるのですが、こいつでは無理でした。

ただ、1テキストのブロック内であれば、増減は可能でした。他の場所に1テキストのバイト数を決めている場所があるのでしょうが、それは今回見つけきれませんでした。

 

なので、やった方法としては、他の言語の文字数を減らしてスペイン語を日本語に変換しました。

(なので極端に文字数が少ないものは、翻訳が不可能でした。例:samとか、No=いらない とか)

 

プログラムを組んでバイナリ入出力でファイルを仕上げましたので、結構ハードルが高いと思います。

 

サンプルはガラクタ置き場に置いてあります。(←の場所についての質問は受け付けません。)