最近はテレワークの影響で仕事中の息抜き(散歩)ができず、かえって不健康になっている zan-gyo です。
Unity ベースのとあるゲームの日本語化を行っているのですが、現在進行形で新機能が実装されているゲームであるため 日本語化MOD に必要な .unity3d ファイルの頻繁な再生成が必要になっています。
翻訳自体は自宅サーバ上にある Zanata*1 という翻訳プラットフォームで行っているのですが、ゲーム内で翻訳内容を動作確認するには .unity3d の形式のファイルにパックしないといけません。
※ 私が関わっているゲームでは翻訳者向けにローカライズデータのみを差し替えられる仕組みが予め用意されていたので翻訳差分のみを .unity3d 化しています。
今回(?)はどうやれば .unity3d 形式でパックすることを自動化できるかの話です。
必要なもの:
- Unity 3D (エディタの機能のみを使うのでライセンスチェックは緩い模様?)
- パックするデータのフォルダ構造とメタデータ
- Tabletop-Simulator-Modding の TTSAssetBundlesMenuItems.cs ファイル。
↑の Tabletop-Simulator-Modding のファイル一式の中に Unity プロジェクトの Assets/Editor に展開する .cs ファイルがあるのですが、TTSAssetBundlesMenuItems.cs を所定の場所に設置すると Unity の Assets メニューに "Build AssetBundles" という項目が追加されます。
このメニュー項目を実行すると、.cs内のスクリプトによって Assets フォルダの中で出力対象に設定されているものがビルドされて、単体の .unity3d ファイルになります。
Build AssetBundles の自動化について
ビルド処理を自動化するにはコマンドラインから Unity 3D を起動して、メニュー項目を実行し、その後でプログラムを終了させる必要があります。
Jenkins (フリーのビルド管理ツール) に Invoke Unity3d Editor を追加している場合は以下のパラメタで実行可能です (Ubuntuで動作確認済み)。
-projectPath $WORKSPACE -batchmode -quit -nographics -executeMethod TTSAssetBundlesMenuItems.BuildAssetBundles
-projectPath $WORKSPACE |
Jenkins が自動生成するビルド処理用の一時フォルダをプロジェクトファイルの所在地として指定 |
---|---|
-batchmode | 自動処理モードを指定 |
-quit | 処理完了後にUnity3Dを自動終了 |
-nographics | GUI を表示しない。 |
-executeMethod TTSAssetBundlesMenuItems.BuildAssetBundles | メニュー項目を実行する |
あとは:
- Unity3d が必要とするファイル一式を適当なソース管理システム (SVN / git) 等に登録して、Jenkins によって展開させる。
- 翻訳データを取得し、Assets フォルダ以下に展開する。
- 翻訳データの入っている親フォルダのメタデータで assetBundleName: を指定し、出力対象にする。
- Unity 3d で Assets のパッケージ化
- 生成されたファイルを配布用の場所へ移動
という流れになります。
#1 の Unity 3Dが必要とするファイル一式は使用する Unity3d のバージョンが上がったときだけに更新することになります(Unity 3dによってプロジェクトが自動アップグレードされますが、時間がかかるために予め外部で更新済みのプロジェクトを登録しておきます)。