M4–M6 复盘:合成开门 × 自动瞄准战斗 × 死亡捡尸¶
本文是对 magic-plant-demo 里程碑 M4 / M5 / M6(dev_manual §10)推进进度的截图复盘 + 技术复盘。 依据:dev_manual.md §2/§7/§9 · content_manual.md §2–§4 · map_progress.md。 日期:2026-09-03 · 版本:0.1-preview
0. 一图总览(截图复盘)¶
用 tools/capture_m6.gd 在窗口模式下取 viewport 纹理截图(headless 渲染不到纹理,见 §9.4)。四张图为 M4/M5/M6 三块各自的关键瞬间:
| 截图 | 内容 | 验证点(里程碑) |
|---|---|---|
![]() |
炼金合成台面板:三条配方 已有/所需,仅「合成·魔钥」的制造按钮亮起 |
M4 合成:数据驱动配方 + 材料足/缺两态 UI |
![]() |
绽华 AoE 绿环命中夜行兽,红色冲撞蓄力环 + 孢子巫在旁 | M5 战斗:自动瞄准近距 AoE、怪还手机制、三层色怪 |
![]() |
toast「你在基地复活,掉落的材料遗留在原地」,玩家走回死亡点,遗物包在旁 | M6 掉包:死亡点掉包 + 尸跑回死亡点 |
![]() |
玩家回基地、满血红条,toast「找回了掉落旅途中丢掉的 2 种材料」 | M6 捡尸:复活回基地 + 走回按 F 拾回入包 |
(基地/全图/昼夜对照仍见 m3_review.md 的 shots/{day,night}_{player,map}.png。)
结论:M4–M6 的核心闭环已从「只能采集/种植/睡觉推进」推进到「采集/打怪掉材料 → 合成台造门钥匙 → 开门 → 死一次走回捡尸」,三条机制线均已可玩并可截图验证。
1. 里程碑对照(dev_manual §10)¶
| 里程碑 | 目标 | 状态 | 说明 |
|---|---|---|---|
| M4 | 合成:RecipeData + 配方 + 门解锁 |
✅ | 合成台面板(材料足/缺两态)、3 条配方造 3 把门钥匙、3 座交互门消耗钥匙→移除碰撞+解锁 |
| M5 | 战斗:自动瞄准 普攻/施法/闪避 + 机型怪 | ✅ | 近=绽华AoE / 远=星刺弹道,E 施法、Shift 闪避(耗蓝+无敌帧)、受击 i-frames/击退;3 种机制怪(冲撞/弹幕/毒沼)+掉落自动拾取 |
| M6 | 死亡:死亡点掉包 + 基地复活 + 捡尸 | ✅ | depleted 信号 → 掉包/清背包/复活/回血;DeathBag 走回拾回;再死旧包丢失、无死亡点标记 |
| M7 | Boss + 结算 + 得分/成就 | ⬜ | 下一步(封闭地牢 Boss + 入场封门 + 结算累计得分) |
| M8 | 移动端打磨 + 换皮 | ⬜ | — |
三块均按拍板决策落地:魔法类统一自动瞄准(M5)、死亡掉落可捡尸但无死亡点标记(M6)、难度无数值墙靠机制组合(M5 三怪三机制)。
2. 关键技术落地(与文档一致性)¶
| 设计点 | 落地 |
|---|---|
数据驱动 .tres |
generator 扩到 10 作物 + 16 物品 + 7 能力 + 3 怪物 + 3 配方 + 3 交互门;Content 新增 monsters/recipes/gates + monster(id)/recipe(id)/gate(id) 检索 |
| 单一真相(dev §4 红线) | 怪物 drops / 配方 inputs·outputs / 门 required_item 均以 ext_resource 引用 items/*.tres(path 托管),生成时 load() 重载为 path 托管实例 |
| 换皮层(§7.4) | Monster / LootDrop / Gate / CraftingStation / DeathBag 全用 _draw() 程序化色块,共用 Interactable 接口;门按类型着色(金/蓝/近黑,解锁→绿) |
| 信号向上、调用向下(§5) | EventBus.crafting_ui_toggled 控制合成面板开合;CraftingUI 只读 Content+Inventory 驱动 PlayerState/Inventory;关卡只负责摆节点 |
| 战斗碰撞分层(§7.6) | 怪=2、玩家 layer=3/mask=3(2 |
| 昼夜低成本(§8) | 怪物 _phase_active() 按 day_night 决定入 enemies 组;夜出现时机与夜生蘑菇一致 |
| 增益时间衰减 | PlayerState.active_buffs/apply_buff/buff_power + _process 逐帧衰减(逐光/燃志/磐石/采风四 buff 影响速度/攻击/减伤) |
| M6 编排 | GameManager._wire(deferred) 连 PlayerState.depleted → 掉包/清包/复活;DeathBag extends Interactable 存 id→count,拾回 Content.item(id) 还原 |
后台兜底 toast |
死亡「复活+掉落遗留」、拾回「找回 2 种材料」、开门解锁文案均走 EventBus.toast |
3. 验证方法¶
- 逻辑冒烟:
--headless --import(注册 class_name)+--headless --script res://tools/smoke.gd→ 13 项全 PASS(合成产出魔钥并扣除材料 / 找到夜行兽 / 自动瞄准攻击命中绽华AoE / 闪避消耗蓝 / 怪物远程·毒沼节点生成 / 怪物掉落物生成 / 掉落物被自动拾取入背包 / 找到魔法门 / 消耗魔钥并开门移除阻挡 / 生成遗物包 / 背包已清空 / 重生回基地复活点 / 拾回遗物包材料入背包)。 - 无渲染冒烟:
--headless --quit-after <<N>>跑主场景 →EXIT=0零报错。 - 内容生成:
--headless --script res://tools/generate_content.gd→ 输出10 蘑菇 / 16 物品 / 7 能力 / 3 怪物 / 3 配方 / 3 门。 - 视觉复盘:
<Godot>_console.exe --path <proj> --script res://tools/capture_m6.gd -- --phase=craft|combat|death(窗口模式,§9.4),产出shots/{craft,combat,death_bag,death_respawn}.png并Read检查。_boot里统一设12:00,白天怪全入组便于演示。
4. 本次踩的坑(含修正)¶
| 坑 | 现象 | 修正 |
|---|---|---|
Monster/Recipe/Gate 缺 desc |
generator 运行时给对象赋缺失字段报错、进程挂起 | 三个数据类补 @export var desc: String(同 ItemData/AbilityData) |
各级 INFERENCE_ON_VARIANT 当 error |
for m: Dictionary in MONSTERS / var canon: ItemData = ... / var r: Array in r["inputs"] 编译失败 |
显式标注类型;凡 --script 里动态调用的对象一律 Variant |
--script scene root 是 Window |
root.current_scene / root.get_nodes_in_group(...) 报 not found |
改用 self.current_scene / self.get_nodes_in_group(...)(self 才是 SceneTree) |
GameManager 里 scene.get_nodes_in_group |
Node 无此方法,Godot 4 |
用 get_tree().get_nodes_in_group(...) |
| 关卡怪出生即仇恨玩家 | 边缘怪最近 ~76px < 150 aggro,开局就冲脸 | 边缘三怪外移到更远显式坐标(夜行兽(0,-34)/孢子巫(24,30)/腐根虫(-12,-96)),最近>150px;smoke 里新建怪 set_physics_process(false)+queue_free() 防干扰 |
| 遗物包复制了背包 | _spawn_death_bag 把 Inventory 内容拷进包但未清 → 复活后材料还在 |
拷贝后调用 Inventory.clear()(再死时旧包被新包替换丢失) |
._craft 前 _rows 未建 |
直接 CraftingUI.new() 冒烟时 _ready 未跑 → 查 _rows 崩 |
冒烟里 add_child(ui) 触发 _ready 再调用 |
截屏脚本缺 _shot |
首次 capture_m6 报 Parse error(方法未定义) |
补 root.get_texture().get_image().save_png(path)(复用 capture.gd 实现) |
5. 遗留与下一步¶
| 优先级 | 项 | 说明 |
|---|---|---|
| 高 | M7 Boss + 结算 + 得分/成就 | 封闭地牢 Boss(多模式/会躲/入场动画封门)+ 结算累计得分 + 成就——预览核心闭环仅剩这一环 |
| 中 | 移动端动作按钮 + 手感 | 摇杆已可移动;攻击/施法/交互触控按钮、安全区(M8) |
| 低 | 美术换皮 | 占位色块 → Sprite2D/AnimatedSprite2D,只换纹理不碰玩法(§7.4) |
| 指标 | draw calls / script time | 暂未实测,M8 打磨时按 §8 预算(draw calls<100、script<4ms)核 |
| 平衡 | 数值手感 | 力量/数量/掉落概率/昼夜占比暂为阈值,M7 后按内容手册回调测一轮 |
6. 一句话结论¶
M4–M6 把「「蘑菇=材料=门钥匙」的探索驱动」与「打怪掉料、死一次可捡尸」真正闭环:开锁无环(三怪掉落在前门可达区内全部可采)、战斗自动瞄准桌移一致、死亡魂系掉落可回捡。至此 preview 的核心闭环只剩 Boss+结算(M7)一环即可收官为完整可玩 demo。下一步价值最高的即 M7。



