Unityと数学の学習帳

Unityと数学の同時学習を目的としたブログ

翻訳を支援するunity用プログラム

HatInTimeの翻訳を支援するunity用プログラム

正規表現を利用してテキストファイルの中身を解析し目的に沿った編集を行った上で非破壊的にデーターを出力するプログラムを組んでみた。
個人の目的に特化して作られたコードだが、正規表現を利用した親子構造を持つスクリプトの内容の置換は応用が効く為、よく似た目的を持つ人の参考資料になるかもしれない。
コードはunity上で実行されることを前提に書かれている。適当なgameObjectsにクラス名を合わせてAddComponentすれば、すぐに動くと思う。

HatInTimeの翻訳を支援するunity用のプログラム

やっていることの例:
以下のような二つのテキストファイルがあるとする。refは元の翻訳前のテキストファイル。workはrefに対して同名同フォルダ構成の翻訳作業後のテキストファイル。
f:id:cqbosinko:20180929141923p:plain

各セリフのデータはシーンを表すヘッダ「[シーン名]」と、そのシーン内でキャラクタが喋るセリフ「タグ=台詞」で構成されている。
workデータは翻訳作業や様々な理由により、refデータの行位置関係と比べバラバラな位置になってしまっている。
このプログラムはrefのデーターをベースにしてworkの各コードを抽出し位置を合わせて整理する。

結果、以下のようなテキストファイルをフォルダやファイルの位置関係も合せながら別途に出力する

f:id:cqbosinko:20180929143218p:plain

ゲーム側のスクリプト処理の特徴として

[groupA]
voice1 = code1
voice2 = code2

[groupB]
voice1 = code3
voice2 = code4

というスクリプトがあった場合、ゲーム側はgroupAにvoice1=code1とvoice2=code2を関連付けて処理する。
従ってgroupAにvoice2 = code4が関連付けられたり、groupBにvoice2 = code2が関連付けられるとデータとしては使えなくなる。
この「親子関係は維持」して変換する必要がある。

[親]
子1=code
子2=code

当プログラムは、これを正常に変換する。
変換後の翻訳作業にはVisualStudioの「比較モード」を利用して翻訳作業を進める。比較モードは実行ファイルよりオプションと対象ファイルを指定して実行する必要がある
例えば以下のようなバッチファイルを作り、あらかじめ一つVisualStusioを起動した状態でバッチファイルを起動するとすべての対象ファイルがタブに収められる

cd C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\
start devenv.exe /diff C:\Users\yourPC\Desktop\labo\ref\sequences\seals_ship.int D:\SteamLibrary\steamapps\common\HatinTime\HatinTimeGame\Mods\JapaneseMod\Localization\INT\sequences\seals_ship.int
start devenv.exe /diff C:\Users\yourPC\Desktop\labo\ref\sequences\alpv_ship.int D:\SteamLibrary\steamapps\common\HatinTime\HatinTimeGame\Mods\JapaneseMod\Localization\INT\sequences\alpv_ship.int
start devenv.exe /diff C:\Users\yourPC\Desktop\labo\ref\sequences\crows_ship.int D:\SteamLibrary\steamapps\common\HatinTime\HatinTimeGame\Mods\JapaneseMod\Localization\INT\sequences\crows_ship.int

画面はこのようになる
f:id:cqbosinko:20180930145319p:plain




A Hat in Time のMOD制作忘備録

「A Hat in Time」はアンリアルエンジン3を利用して作られていた。MODを作る際にUE3の知識が得られたので忘備録として残しておく
あくまでunityユーザーからのUE3機能把握を感覚的に忘備録として書いているので内容は”いいかげん”です。ふーん。そんなものかな?といった感じで読んで欲しいです。

  • UE3は基本的にマルチランゲージをサポートしている
  • ゲームフォルダ内のLocalizationフォルダ内のintフォルダが初期言語として設定される(大抵、英語)拡張子は各国別に3文字で指定できる。日本は*.jpn。メモ帳やヴィジュアルスタジオなどで開くと分かるが単なるテキストファイル。このファイル内で使われる文字コードにより自動的に利用するフォントをエンジンが決定している
  • KISMETは視覚的に確認できるプログラミングでActorと連携して機能させることが出来る。非常に癖が強い。Actorをドラッグ&ドロップすることでクラス機能を配置できる
  • ActorはunityにおけるGameObjectに相当するらしい。Actorに対して*.ucスクリプトファイルを利用してクラスを作成し、関数やプロパティを実装、処理する
  • UPKファイルはunityにおける圧縮され整頓されたAssetBundleのようなものに該当するらしい。画像、フォント、音楽などの素材データになる
  • 「A Hat in Time」ではMODフォルダ内に決まった形式でデーターが収まっている必要があった。好き勝手にデータファイルを置いてもうまく動かない
  • Classesフォルダ。MODそのものが利用し生成したクラスファイル。基本的にMOD_Managerアプリに生成を任せていればOK
  • Contentフォルダ。MODで利用するUPKファイルは全てここに収めて置く。コンパイラはこのフォルダの中身を見る
  • Localizationフォルダ。言語ファイルを収める。日本語コードでもintフォルダに*.intとして納めれば初期言語としてオーバーライドできる。これに関してはコンパイル不要
  • Mapsフォルダ。マップデーターを収める。マップデーター実行時はマップエディターでのBuildが必要。またMOD_ManagerアプリでCompile_ScriptsとCookedが必要
  • カレントにmodinfo.iniを作成し細かいMODの設定をスクリプトで行う。多くのファイルをリプレースする場合、このファイルを編集する機会は必然多くなる。内容は人が作ったものを参考にするとよい
  • 他人の作ったMODデーターはスチームがDドライブにインストールされている場合、D:\SteamLibrary\steamapps\workshop\content の各ゲームIDの中にワークショップ単位で収められている。これをゲームのMODフォルダ内に収めればソースが再現できる
  • UE3とUE4はファイル形式そのものが違い互換性はまったくない
  • 全てのデータが揃うと「Update Steam Workshop」でパブリッシングできる。steamワークショップでは常に履歴は記録されロールバック出来る。
  • パブリッシュされるとMODフォルダのカレントにSteamWorkshop.iniが生成される。テキストファイルで開くと中にWorkshopIdが記録されている
  • フォント作成ではUE4を利用した。UE3は日本語フォント未対応(確認済み。またフォントによってはプロテクトがあるものもあるようだ)。ファイルの互換性はまったくないのでUE4でTGA形式で出力し、フォントデーターの。各プロパティを手動で地道にコピペしていく事でUE4形式からUE3に移植した(コピペは内容を少し編集すると丸ごと移し替えることが出来た。一度メモ帳か何かにペーストしてUE3が飲み込める形に書き換える。要内容観察)
  • UE3ではエディタのContentBrowserの利用が非常に重要になってくる。ここではUE3エンジンが読み込んだ全素材データーを閲覧できる。ActorClassesでは*.ucで作成した動作するクラスを閲覧でき、クラス機能(関数やプロパティ)をkismetやマップエディタ内にドラッグアンドドロップで配置できる。この辺りはunityのGameobjectsと扱いが良く似ている(重要!)おそらくコーディングで新しくクラスを作るとコンパイルしないとクラスとしてエンジンは認識しないと思われる(unityのように作ったら即認識はしないと思われる。未確認)
  • エディタのlevelタブではマップ内に配置した素材を検索閲覧できる
  • ContentBrowserのImportを利用することで自分が作成した画像や音楽、などのデーターをインポートできる。PSDファイルなども読み込めるので便利
  • 読み込んでもセーブする必要があるので注意。この時のセーブされたファイルの配置などに注意。
  • 各素材は右クリックすることで様々な機能にアクセスできることに留意。copy full name to clipboardなどは非常に重要な機能で、modinfo.iniファイルなどでMODにリプレースを指示するときに重要になってくる
  • 日本語の翻訳作業は検索機能が強力なvisualStudioがおすすめ。フォルダ内検索などでは*.ucファイルなどのテキストワードなども一括検索できるのでイベント名を利用してactorのクラスを探すなどにも利用できた。コレが出来るとできないでは作業上、大きく能率が変わるので、他の作業でも積極的にvisualstudioを利用すること。とにかくコード編集のみならずテキスト編集で高度な作業はこれでやったほうがいい。一度読み込んだ複数ファイルはプロジェクトとして保存しておくと状態を維持するので作業の再開も非常にスムーズだった。複数ファイルを横断した置換なども可能(名詞の統一などにも威力がある)

総評;UE3は古い作りというかunityより二次生成物が多いので手間がかかりめんどくさい。UE4で改善されていると思われる。実行ファイルはunityより早くて快適だが作る手間は少し多いと感じた