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 三块各自的关键瞬间:

截图 内容 验证点(里程碑)
craft 炼金合成台面板:三条配方 已有/所需,仅「合成·魔钥」的制造按钮亮起 M4 合成:数据驱动配方 + 材料足/缺两态 UI
combat 绽华 AoE 绿环命中夜行兽,红色冲撞蓄力环 + 孢子巫在旁 M5 战斗:自动瞄准近距 AoE、怪还手机制、三层色怪
death_bag toast「你在基地复活,掉落的材料遗留在原地」,玩家走回死亡点,遗物包在旁 M6 掉包:死亡点掉包 + 尸跑回死亡点
death_respawn 玩家回基地、满血红条,toast「找回了掉落旅途中丢掉的 2 种材料」 M6 捡尸:复活回基地 + 走回按 F 拾回入包

(基地/全图/昼夜对照仍见 m3_review.mdshots/{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.gd13 项全 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}.pngRead 检查。_boot 里统一设 12:00,白天怪全入组便于演示。

4. 本次踩的坑(含修正)

现象 修正
Monster/Recipe/Gatedesc 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 rootWindow root.current_scene / root.get_nodes_in_group(...)not found 改用 self.current_scene / self.get_nodes_in_group(...)(self 才是 SceneTree)
GameManagerscene.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_bagInventory 内容拷进包但未清 → 复活后材料还在 拷贝后调用 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