VberAI からゲームエンジンへ:一つの画板を Godot と Unity に書き出す
要約
同じ画板を、VberAI Studio から二度書き出しています。一度は Unity へ、Unity のプロジェクトフォルダの形で保存します。一度は Godot へ、Godot の形式で保存します。二つの書き出しを、まとめて対照しています。録画は YouTube にあります。
揃っているもの:29 枚の PNG。バイト列とファイル名は一致します。画面は 1920×1080 が一つ。ノード名は一致します。各画像の位置はシーンファイルに書いてあります。
違っているもの:Godot は一段のファイルで、59 個です。Unity は先に Assets があり、その中が Textures、Prefabs、Materials で、66 個です。四つの文字は、Godot ではノードに書き、Unity ではマテリアルファイル三つに書きます。
この書き出しは目的を満たしています。どちらも、そのエンジンのフォルダの形に置いたアートです。プロジェクトを開けば、MCP は元の位置に組んである画面を読みます。
フォルダは違う。プロジェクトへ入れれば、MCP はどちらでも元の位置に画面を組める
二つの zip を並べて開きます。Godot の zip はファイルが一段です。Unity の zip は Assets が先にあり、その中にフォルダが三つあります。並びは違います。どちらも、そのエンジン向けに書いたアートのフォルダです。名前と位置はファイルの中にあります。書き出しをプロジェクトへ置き、エディタを開いたままにすると、MCP が読むのはこの組んである 1920×1080 の画面です。
Figma から Godot へ と Figma から Unity へ は、各エンジンが期待するフォルダを書いています。以下は、今回の二つの zip を開いた中身です。二つの書き出しは、ここからダウンロードできます。
- Godot の zip:59 ファイル。展開すると一段です。
- Unity の zip:66 ファイル。最初のフォルダは
Assetsです。
同じ部分の分解:29 枚の画像
同じ名前の PNG をどれでも開きます。バイト列は一致します。ファイル名も一致します。
画板と、その上のパーツです。
background_2_2.pngpirate_ship.png、lava_platform.pngwooden_tower.png、wooden_hut.png、red_crystal_tower.png、pirate_skull_tower.png、fire_tower.png、dark_skull_tower.png
カードとスペルです。
large_skull_tower_card.png、skull_tower_card_one.png、skull_tower_card_two.png、skull_tower_card_three.png、skull_tower_card_four.pnggreen_spell_card.png、fire_spell_card.png、blue_spell_card.png
画面の部品です。
resource_status_bar.png、health_bar_2.pnggold_button_one.png、gold_button_two.png、gold_button_three.pngpause_button.png、pause_small_icon.pngcoin_icon_2_2.png、skull_icon.png、heart_icon_2.png、shield_icon_2.png、metal_orb_icon.png
四つの名前はシーンにラベルがあり、切り出した画像ファイルはありません。skull_count、coin_amount_2、life_count、tower_level は PNG として出てきません。画面上の 6/15、340、6、10 は、ノードに直接打った文字です。
| シーン上の名前 | 画面上の文字 | サイズ |
|---|---|---|
skull_count | 6/15 | 19 |
coin_amount_2 | 340 | 19 |
life_count | 6 | 17 |
tower_level | 10 | 21 |
Godot:59 ファイル。開くと一段
Godot の zip を開きます。中身はこれだけです。
*.png 画像 29 枚
*.png.import 読み込み設定 29 件。各画像の隣に一つ
*.1920x1080_layer.tscn シーン 1 件
.tscn は text scene の略で、テキスト形式のシーンです。シーンのルートは 1920×1080 の Control です。その下に TextureRect が 29、Label が 4 あります。各画像は res://<名前>.png を指します。この一段にあるファイルです。各 .import は、その PNG をテクスチャとして扱うよう Godot に書きます。文字色、アウトライン、影は Label に書いてあります。
シーンのファイル名は、画板の id に 1920x1080_layer を足したものです。
Unity:66 ファイル。開くと先に Assets
Unity の zip を開きます。最初に見えるのは Assets です。Unity のプロジェクトがファイルを置くルートフォルダです。中に入るとフォルダが三つあります。
Assets/Textures/*.png 画像 29 枚
Assets/Textures/*.png.meta 読み込み設定 29 件。各画像の隣に一つ
Assets/Prefabs/*.1920x1080_layer.prefab
Assets/Prefabs/*.prefab.meta
Assets/Materials/TMP_FX_*.mat 文字の見た目 3 件
Assets/Materials/*.mat.meta
Prefab のルートは Canvas で、基準サイズは 1920×1080 です。子の名前は Godot と揃っています。各 .meta は PNG を Sprite として読み込みます。
Unity は Assets の中の三つのフォルダとして展開される
Unity が読み込むのは、プロジェクトの Assets ディレクトリ以下のファイルです。そのため、この zip の一段目は Assets です。プロジェクトへコピーすると、Textures、Prefabs、Materials は、エディタがすでにリアルタイムで追っているディレクトリの木へ入ります。PNG を zip のルートに置くと、その木の外になり、エディタは読み込みません。
三つのフォルダは、この画面が実際に使う三種類のファイルです。一つずつ開けます。
Texturesは画像です。各 PNG の隣に.metaがあります。Sprite は、Unity が画面に使う画像です。.metaの中の GUID は、プロジェクトの中でのその画像の番号です。.metaは書き出しの時点で書いてあります。フォルダがプロジェクトに入り、エディタが更新したあと、Unity はその設定で読み込みます。Prefabsは組んである画面です。この書き出しの.prefabは一つです。隣の.prefab.metaは、その Prefab の読み込み設定です。.prefabには Canvas、子の名前、1920×1080 の画板上の各画像の位置が入っています。Materialsにあるのは、今回は文字の見た目だけです。四つの文字のアウトラインと影は、TextMesh Pro のマテリアル三つです。skull_countとcoin_amount_2は一つを共有し、life_countとtower_levelはそれぞれ一つです。各ファイルはOUTLINE_ONとUNDERLAY_ONが有効です。
この Godot のパッケージは、そのフォルダを足しません。シーン内の各画像のパスは res://<名前>.png なので、.tscn と PNG は一段に並びます。.import は Unity の .meta がしている仕事で、PNG の隣に残します。.tscn が組んである画面なので、Prefabs フォルダはありません。アウトラインは Label に残るので、Materials フォルダもありません。Godot の zip を開くと、Unity の Textures の中身のように見え、シーンファイルも同じ一覧に入ります。
MCP により扱いやすい書き出しは、Unity と Godot のどちらか
同じです。MCP はフォルダの段数を比べません。ファイルがプロジェクトに入り、エディタが開いたあとのシーンを読みます。
Godot MCP が読むのは、開いているシーンです。その .tscn のノードと、スクリプトです。Unity MCP が読むのは、開いているシーンです。GameObject と、Assets/Prefabs の Prefab です。MCP がそのチャネルです。どちらの名前と位置もすでに書いてあるので、この画面を画板の元の位置へ戻す作業は、書き出しの中で終わっています。
zip は、先にプロジェクトへコピーする必要があります。画板をあとから変えた場合、もう一度書き出してから、MCP に新しい画面が入ります。Godot 側の変更も、Unity 側の変更も、次の生成を動かすには、画板からの書き出しが先に要ります。
質問と答え
Assets は Unity で何をするか
Assets は、Unity のプロジェクトでファイルを置くルートフォルダです。画像、Prefab、マテリアルはその下にあります。エディタが読み込むのは、この木の中のファイルです。この zip の一段目が Assets なのは、プロジェクトへコピーしたあと、エディタがすでに追っている木へ入るためです。
Prefab が二つに見えるのはなぜか
Prefabs を開くとファイルは二つです。Prefab は一つです。
....1920x1080_layer.prefab が Prefab です。1920×1080 の画面全体が、この一つのファイルに入っています。29 枚の画像の位置と、四つの文字です。
同じ名前の .prefab.meta は、その Prefab の読み込み設定です。Prefab の GUID が書いてあります。29 枚の画像は、すべてこの一つの Prefab の中です。
Materials の中身は、すべて文字に関係するか
この書き出しでは、そうです。Materials の三つのファイルは、すべて TextMesh Pro のマテリアルです。ファイル名は TMP_FX_ で始まります。画面上の文字を Unity へ書き出したあと、文字色、アウトライン、影はこれらのマテリアルに入ります。サイズ 19 の二つは一つを共有します。サイズ 17 と 21 は、それぞれ一つです。Godot は同じ見た目を Label に書くので、Godot のパッケージにこのフォルダはありません。
Textures の .meta は、書き出しのあと自動で効くか
効きます。ただし、ファイルが Unity のプロジェクトに入ってからです。各 .meta は、書き出しの時点で PNG の隣に書いてあります。展開しただけでは Unity は起動しません。Assets がプロジェクトに入り、エディタが更新して読み込みを始めると、Unity はすでにある .meta を読み、中の Sprite 設定を使います。画像を一枚ずつ手で設定する必要はありません。.meta を消して Unity に作り直させると、GUID が新しくなり、Prefab からその画像への参照は揃わなくなります。
GUID と Sprite はどう組になっているか
Sprite は、Unity が UI と 2D に使う画像です。各 PNG の .meta には GUID があり、プロジェクトの中でのそのファイルの番号です。Prefab は、各画像をこの番号で参照します。あとからファイル名を変えても、.meta が残っていれば、Prefab は同じ画像を指します。この書き出しでは、.meta と Prefab は一緒に書かれているので、番号はすでに揃っています。
Godot の .tscn は何の略か
.tscn は text scene の略で、テキスト形式のシーンです。Godot はこのテキストファイルにシーンを保存します。どのノードがあるか、どこに置くか、どの画像を付けるか、文字は何か、です。バイナリのシーンファイルは .scn です。この書き出しは .tscn です。開くと、1920×1080 の Control と、29 の TextureRect、4 つの Label があります。
まとめ
この対照は届いています。1920×1080 の画板は Godot と Unity の両方に入り、画像、名前、位置が揃っています。プロジェクトを開くと、MCP がどちらでも読むのは、すでに組んである同じ画面です。
ファイルそのものに、まだ二つの空きがあります。シーンと Prefab のファイル名は、いまも画板の id に 1920x1080_layer を足したものです。プレイ側のシーン名は、この書き出しにはまだ入っていません。Unity が Godot より 7 ファイル多いのは、文字の見た目が Materials に単独で置かれるからです。あとからテーマやイベント用の切り出しを替えるときは、これらの画像ファイル名を保ったまま、Restyle でもう一度書き出します。