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 换皮肤 再导出一次。