跳到正文
月明Verse朱志勇 · 独立开发者
← 返回文章库

· 月明Verse · AI 创作 · 20 分钟阅读

我用半小时,把一张图做成了2D肉鸽游戏

用 GPT Image 2、Codex、Blender 和 Three.js,把原创形象从参考图接力做成立体角色与可玩的网页肉鸽游戏,并公开六组提示词。

真人作者与从原创形象、3D 角色到可玩月面游戏的制作流程笔记板。

GPT Image 2、Codex、Blender 和 Three.js 全流程分享

电脑端运行中的月面战斗游戏动图

昨天我做了一个有点上头的小实验。

我先用 GPT Image 2 做以图生图,把自己的宇航员形象整理成一张 Q 版全身图;再让 Codex 操作 Blender,把图片做成可编辑的 3D 模型;接着导出 GLB,用 Three.js 放进网页展厅;模型能转起来之后,我又让 GPT-6 Astra 基于同一个 IP 和网页项目,做成了一款俯视角 2D 月面肉鸽游戏。

从参考图到能玩的版本,整个过程大约用了半小时。现在它已经能在电脑和手机浏览器里运行:有移动、自动射击、冲刺、技能、经验升级、道具、不同敌人和首领战。

这篇不讲跑分,也不讨论谁超过了谁。我只把这次做成它的过程、工具分工和六组提示词完整放出来。

如果你手里也有一张自己的头像、品牌角色或者原创 IP,读完可以直接照着这条顺序,从一张图开始,先做出能在网页里转动的 3D 角色,再继续加入玩法。

AI 做完整作品,难点不在生成某一个环节,而在让上一步的结果能被下一步继续使用。


做出来的不止一张效果图,还有一局完整游戏

先看手机端。

手机端首领战、摇杆和技能按钮动图

手机画面里已经打到第 7 波,累计 245 击杀。左下角是虚拟摇杆,右下角有月牙斩、星环爆发、冲刺和修复按钮;中间还能看到首领血条、技能特效、经验掉落和敌人弹幕。

电脑端使用 WASD 移动,角色自动瞄准射击,空格触发冲刺,E、R、Q 分别对应技能和修复。升级时游戏会暂停,从三项不重复强化中选择一项;死亡、胜利之后也能完整重开。

玩法上,我参考的是 Roguelite(肉鸽)/幸存者类游戏:角色持续移动和自动攻击,在一波波敌人中拾取经验、选择强化,最后进入首领战。这个半小时完成的 2D 网页 Demo,已经具备从开局、战斗、成长到结算的闭环。

我这次想验证的是:Astra 能不能接住前面已经做好的角色、模型和网页,在现有项目里继续完成游戏。

结果是:这条从图片到 3D 角色,再到 2D 网页游戏的链路跑通了。

如果你也想做,先拆成五个看得见的结果

一上来就让 AI “做一个完整游戏”,很容易得到一张漂亮页面,却不知道下一步该从哪里修改。

更稳的方式,是把任务拆成五个能直接验收的结果。每完成一项,再把文件交给下一步。

  1. GPT Image 2 以图生图:得到一张外观统一、身体完整的 Q 版角色图。
  2. Codex + Blender MCP / Python:得到一个还能继续修改的 3D 角色模型。
  3. 导出 GLB:得到一个网页项目能够读取的模型文件。
  4. Three.js:让角色能在电脑和手机浏览器中显示、旋转和缩放。
  5. TypeScript 游戏代码:在俯视角 2D 场景中,让角色能够战斗、升级、使用技能并完成一局游戏。

从参考图、3D网格到2D网页游戏的制作链

如果你从一张人物图开始,可以先把角色外观说清楚:头身比例是什么样,哪些配色和配饰必须保留,手脚有没有完整露出来。GPT Image 2 生成的 Q 版全身图,会成为后续建模时的视觉参考。

接下来,Codex 根据这张参考图在 Blender 里创建三维几何、拆分身体部件、设置材质,并导出 GLB。你可以把 GLB 理解成这条流程里的“3D 交接文件”:Blender 把角色装进去,Three.js 再通过 GLTFLoader 在网页中读取它。Three.js 官方文档也提供了加载 glTF/GLB 场景的标准方式。

模型负责“长什么样”,Three.js 负责“怎样显示”,TypeScript 游戏代码负责“怎样玩”。把这三层分开,后面改角色、场景或者玩法时,不需要全部推倒重来。

第一步:把原始形象整理成适合建模的 Q 版图

这是我交给 GPT Image 2 做以图生图的参考图。

原始宇航员参考图

原图的识别点很明确:宇航服、黑色面罩、绿色月牙,以及扶着头盔的姿势。但原图是坐姿,身体有遮挡,如果直接照着它做模型,腿部比例、手臂位置和背面结构都要靠猜。

为了减少这些看不见部分的猜测,我先补了一张干净的 Q 版全身图。

GPT Image 2生成的Q版全身角色图

下面这段是项目里实际使用的原始提示词:

Transform the person or character in the reference image into a polished 3D chibi desktop companion.
Preserve their recognizable identity, hairstyle, face, outfit colors, and distinctive accessories.
Show one single full-body character, standing in a relaxed front three-quarter pose, with the entire head, hands, legs, and feet visible.
Use an expressive oversized head, compact cute proportions, a premium animated-film figurine look, soft studio lighting, and a clean silhouette.
Place the character centered on a plain light neutral background.
No text, no watermark, no frame, no extra people, no duplicated limbs, and no cropped body parts.

这段默认会把人物调整成轻松站姿。如果你的原图动作本身就是角色标志,可以把第三句换成:

Preserve the exact arm pose, hand placement, body orientation, and stance of the reference image. Keep the entire head, hands, legs, and feet visible.

这一环节不追求氛围,验收标准是一张 轮廓完整、配色清楚、手脚不被裁切、能交给下一步使用 的角色图。

第二步:让 Codex 在 Blender 里把图片做成立体角色

有了 Q 版角色图,我把下面这段交给 Codex:

根据附件角色图,在 Blender 中制作可编辑的 3D 模型。

先检查 Blender MCP 是否可用;可用时通过 MCP 操作,否则说明情况并使用本机 Blender Python。
优先匹配头身比例、标志性配饰、手臂姿势和配色。先给出同角度轮廓预览,再补细节。
头盔、躯干、手臂、大腿、小腿和靴子独立命名,保留后续动画所需的关节分组。
单张图看不到的背面可以合理补全,并说明推测部分。

交付 .blend、角色专用 .glb 和预览图,检查导出后的材质、朝向与尺寸。

Codex通过Blender构建的可编辑宇航员模型

这里我没有只要求一张渲染图,而是明确要 .blend、角色专用 .glb 和预览图。

原因很简单:一张渲染图只能看,.blend 才能继续改模型,.glb 才能交给网页。头盔、躯干、手臂和腿部分开命名,也是为了后面做动作时还能找到对应部件。

如果你不会手动操作 Blender,这一步也可以交给 Codex:Blender MCP 把 Codex 和 Blender 的 Python API 接起来,你用自然语言描述角色和交付要求,它在 Blender 中执行创建物体、调整尺寸、设置材质和导出文件等操作。

使用前记得给它一个独立项目目录。Blender 官方的 MCP 说明明确提醒:模型生成的代码会在 Blender 环境中执行。不要让这个工作区接触隐私和重要文件,同时保留可回退的 .blend 文件。

第三步:用 GLB 把模型送进浏览器

模型做好之后,我没有立即做游戏,而是先做了一个角色展厅。

使用现有 GLB 和 Three.js,制作可运行的网页角色展厅。

通过 GLTFLoader 加载模型,支持拖动旋转、缩放和重置视角,兼容电脑与手机。
模型正确居中落地,使用柔和灯光与接地阴影,避免发光过曝。
保留 UV、材质和动画分组,加入加载状态及失败提示。

已有项目就继续修改。实际运行并修复构建、资源加载问题,提供访问入口。

手机浏览器中的Three.js角色展厅

为什么不直接从 Blender 跳到游戏?

因为角色展厅是一个很便宜的验收点。只要模型能在手机和电脑上被加载、旋转、缩放,材质没有丢,方向和尺寸也正常,就说明“模型交给网页”这次交接成功了。

如果这一步都没跑通,直接叠加敌人、技能和碰撞,出了问题很难判断究竟是模型、加载器还是游戏逻辑造成的。

先验证最小交接,再增加复杂度,是这次能够在半小时内做完的关键。

第四步:让 Astra 在现有项目上补齐游戏闭环

角色已经能在网页中显示之后,我再让 Codex Astra 增加 /game 页面:

基于当前角色和 Three.js 项目,增加 /game 页面,制作俯视角 2D 月面 Roguelite,保留原来的 3D 角色展厅。

WASD 移动,自动瞄准射击,空格冲刺短暂无敌,Q 使用修复包;手机提供摇杆和按钮。
敌人包含近战追击、远程攻击、预警冲锋,以及约 150 秒出现的首领。
击杀掉经验,拾取升级,升级时暂停并提供三项不重复强化。
实现道具、伤害判定、攻击预警、暂停、死亡、胜利和完整重开。

先完成从开始到结算的可玩流程,将游戏规则与渲染分开,检查碰撞、暂停、升级和重开状态。

这段提示词的重点落在最后两句:先完成从开始到结算的可玩流程,并把游戏规则与渲染分开。

如果只说“给我做一个肉鸽游戏”,模型很容易把时间花在开场动画、菜单和特效上,画面看着热闹,但没有死亡、胜利、暂停或重开。

我把验收条件写进提示词之后,Astra 要交付的就不再是一页会动的网页,而是一套能够完成一局的状态系统。

OpenAI 在 Astra 发布材料中也把游戏开发作为能力展示之一:模型不只需要写代码,还要理解空间、响应式界面、游戏手感,并在运行后继续发现问题。这次我自己的实测,感受最明显的正是“接着已有项目往下做”的能力。

第五步:玩法跑通后,再统一场景和技能

基础循环能玩之后,再替换占位美术:

保持现有玩法,替换占位美术,统一月面科幻风格。

用图像生成制作月壤贴图、可染色甲壳贴图,以及弹药/经验/命中特效图集。
用 Blender 重建有分节肢体的怪物、着陆平台、着陆器、信标和岩石。
把生成图片实际接入材质与精灵,保留 UV 和关节分组。

敌我特效颜色清晰,攻击预警始终可见,灯光柔和。
交付游戏实际使用的资源,明确哪些是二维图片、哪些是三维模型。

角色动作和技能反馈,则单独用下一条处理:

改善当前宇航员的步态与技能视觉反馈。

保留正确的髋膝层级,按实际移动距离驱动交替迈步、屈膝和起停过渡,减少脚底滑动。
上半身保持瞄准,下半身跟随移动方向。

新增开局可用的技能:
E 月牙斩:扇形伤害,多层月光弧线和飞散粒子。
R 星环爆发:范围伤害与击退,清除附近敌方弹幕,三层扩散光环。
空格冲刺:保留短暂无敌,增加人物姿态残影。

技能必须有真实伤害、冷却和触控按钮,视觉范围与判定匹配。
控制亮度,检查暂停、升级、死亡和重开时的动画与特效回收。

图片资产、3D模型与2D网页游戏之间的交接

这两条提示词刻意把“好看”和“能用”绑在一起。

技能不能只有光效,还要有真实伤害和冷却;按钮不能只在电脑上工作,还要出现在触屏端;动画也不能只管播放,还要在暂停、死亡和重开时正确回收。

这类约束看起来没有“电影级特效”那么抓眼球,却决定了成品究竟是演示视频,还是读者可以上手玩的东西。

半小时跑通的关键:每一步都有交付物

回头看这次过程,我没有找到什么“一句话生成游戏”的魔法。

半小时能跑通,是因为每一步都给了明确的交付物:

  • 以图生图交付一张身体完整的角色图;
  • Blender 交付可编辑工程和 GLB;
  • Three.js 先交付能加载、旋转和缩放的展厅;
  • 游戏阶段先交付从开始到结算的闭环;
  • 美术阶段再替换占位资源,增加动作和技能反馈。

上一环节只要交出合格结果,下一环节就能接着做。哪一步有问题,也能回到那个交接点单独修。

测试 GPT-6 Astra 这类模型时,可以把重点放在长任务上:给它现有文件、可用工具和验收标准,看它能不能接着已有成果,把任务推进到可使用的结果。

你照着做之前,需要准备什么

想复用这套流程,需要先把下面几项环境准备好:

你需要准备:

  • 一张主体清楚、识别特征明确的参考图;
  • 能使用以图生图的工具;
  • 已安装 Blender,并配置可用的 Blender MCP,或允许 Codex 使用 Blender Python;
  • 一个能运行 Three.js 和 TypeScript 的网页项目;
  • 能检查网页、运行构建并修改文件的 Codex 环境。

第一次尝试时,不建议直接照搬所有敌人和技能。先完成“一个角色、一种敌人、一种攻击、一次升级、一次结算”,确认电脑和手机都能操作,再继续加内容。

一条好提示词负责提出要求,一条能完成作品的工作流还要定义交付物、验收点和下一步怎样接住结果。

这是一次个人实验。它从一张参考图出发,先做出可编辑的 3D 模型和网页展厅,再在手机和电脑浏览器中完成了一局 2D 肉鸽游戏。这条制作链已经跑通。

上面的六组提示词都可以直接复制。建议不要一次性全部发送,按顺序执行,每一步确认交付物之后再进入下一步。

如果你也想把自己的头像、品牌角色或者原创 IP 做成小游戏,就从第一张完整的 Q 版全身图开始。

如果你也在折腾 AI 工具、Agent 和真实项目,欢迎关注「月明水清深」,后续实测我会继续拆。

—— 月明水清深

Share: