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 都能按原位置拼介面
先把兩個壓縮包並排開啟。Godot 這一包點開是一層檔案。Unity 這一包點開先是 Assets,再進去是三個資料夾。目錄不同。兩邊都是按各自引擎寫好的美術資料夾:名字和位置已經在檔案裡。把匯出放進工程,編輯器開著,MCP 讀到的就是這塊拼好的 1920×1080 介面。
Figma 到 Godot 和 Figma 到 Unity 寫的是每個引擎期望的目錄。下面按這次的兩個壓縮包點開看。兩份匯出可以直接下載:
相同部分及拆解: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 的壓縮包,整包就是這些:
*.png 29 張圖
*.png.import 29 份匯入配置,每張圖旁邊一份
*.1920x1080_layer.tscn 1 個場景
.tscn 是 text scene 的縮寫,意思是文本場景。場景根節點是一個 1920×1080 的 Control。下面是 29 個 TextureRect 和 4 個 Label。每張圖指向 res://<名字>.png,也就是這一層裡的那個檔案。每份 .import 告訴 Godot 把這張 PNG 當作紋理。字色、描邊和陰影寫在 Label 上。
場景檔名是畫板 id 再加上 1920x1080_layer。
Unity:66 個檔案,點開先看到 Assets
點開 Unity 的壓縮包,第一眼是 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 目錄下的檔案。所以這個壓縮包的第一層就是 Assets。複製進工程之後,Textures、Prefabs、Materials 會併入編輯器已經在即時跟蹤的那棵目錄。PNG 如果放在壓縮包的根目錄,就在這棵目錄外面,編輯器不會匯入。
這三個資料夾,是這塊畫面實際用到的三類檔案。可以一個一個點開:
Textures是切圖。每張 PNG 旁邊有一份.meta。Sprite 是 Unity 裡給介面用的圖片,GUID 是這張圖在工程裡的編號,寫在.meta裡。.meta匯出時已經寫好,放進工程並重新整理之後按這份設定匯入。Prefabs(預製體)是拼好的介面。這次只有一個.prefab。旁邊的.prefab.meta是它的匯入配置,不是第二個預製體。.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,看起來像 Unity 的 Textures 裡面那一層,場景檔案也在這份名單裡。
Unity 和 Godot,哪一份匯出對 MCP 更友好
一樣友好。MCP 不比較資料夾有幾層。它讀的是檔案放進工程、編輯器開啟之後的場景。
Godot MCP 讀當前開啟的場景:那個 .tscn 裡的節點,以及指令碼。Unity MCP 讀當前開啟的場景:遊戲物件,以及 Assets/Prefabs 裡的那個 Prefab。MCP 就是這條通道。兩邊的名字和位置都已經寫好,所以按原位置拼回這塊介面,匯出裡已經完成。
壓縮包仍然要先複製進工程。畫板之後再改,要再匯出一次,MCP 裡才會出現新畫面。在 Godot 裡改的邏輯,或在 Unity 裡改的邏輯,也要先從畫板匯出,才能拿這份新內容去驅動下一次生成。
問與答
Assets 在 Unity 裡做什麼?
Assets 是 Unity 工程裡放資源的根目錄。圖片、預製體、材質都放在這棵目錄下面。編輯器只匯入這裡的檔案。這次匯出的壓縮包第一層寫成 Assets,複製進工程之後,會併入編輯器已經在即時跟蹤的那棵目錄。放在 Assets 外面的 PNG,Unity 不會當作工程資源匯入。
預製體為什麼看起來有兩個?
Prefabs 的簡體中文是預製體。點開 Prefabs,看到兩個檔案,預製體只有一個。
....1920x1080_layer.prefab 是預製體。整塊 1920×1080 畫面組在這一個檔案裡:29 張切圖的位置,加上四段寫在節點上的字。
同名的 .prefab.meta 是這份預製體的匯入配置,裡面記著它的 GUID。29 張切圖都在這一個預製體裡。
Materials 裡是不是都和文字有關?
這份匯出裡,是。Materials 中的三份檔案都是 TextMesh Pro 材質,檔名以 TMP_FX_ 開頭。畫面上的文字匯出到 Unity 中之後,字色、描邊和陰影存在這些材質裡。字號 19 的兩段共用一份,字號 17 和 21 各一份。Godot 把同樣的樣式寫在 Label 上,所以 Godot 的包裡沒有這個資料夾。
Textures 裡的 .meta 匯出之後會自動生效嗎?
會,但要等檔案進了 Unity 工程。.meta 在匯出時已經寫在每張 PNG 旁邊。解壓本身不會啟動 Unity。把 Assets 放進工程,編輯器重新整理並開始匯入時,會讀取這些已有的 .meta,按裡面的 Sprite 設定生效,不必再逐張手改。刪掉 .meta、讓 Unity 重新生成的話,GUID 會換成新的,預製體裡對這張圖的引用會對不上。
Unity 裡的 GUID 和 Sprite 是怎麼一起工作的?
Sprite 是 Unity 裡給介面和 2D 用的圖片。每張 PNG 的 .meta 裡有一串 GUID,是這個資源在工程裡的編號。預製體引用圖片時寫的是這串編號。檔案以後改名,只要 .meta 還在,預製體仍指向同一張圖。這次匯出的 .meta 和預製體是一起生成的,編號已經對上。
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。以後換主題或活動切圖,這些圖片檔名可以保持不變,用 AI 換皮膚 再匯出一次。