材料袋终于可以捡起来,也可以带回咖啡店了。
上一篇里,庭院已经能移动、攻击和翻滚,玩家与敌人也换上了 2D 像素占位形象。但放在路上的材料袋还只是画面样品,战斗结束后,没有更多事情可以做。
这次围绕这件事往前走了一步:先把掉落、拾取和交付接起来,再增加一张外侧空地地图,让玩家从庭院出发,战斗后带着材料回来,与店员完成交付。
1. 让战斗留下可以带走的东西#
第一步是让敌人死亡后掉落一袋材料。玩家靠近后按 E 拾取,界面里的材料数量随之增加;走到咖啡店门口,再按 E,消耗一份材料,完成本轮交付。
由此,原先只有战斗和重试的原型多了一段后续:击败敌人 → 拾取材料 → 返回咖啡店 → 完成交付。
规则暂时很小:每个敌人固定掉落一份材料,每轮交付只需要一份,没有随机物品品质,也没有奖励。先把这一轮走通,才能继续判断材料、战斗与咖啡店之间需要怎样的联系。
看起来只多了一个 E 键,实际要处理不少边界。玩家死亡时不能拾取,隔着墙不能交互,离得太远时提示需要消失;如果附近有多个目标,则选择最近且可以接触到的目标。
一次按键只做一件事。 捡起材料和完成交付不会被同一次输入连续触发,重复交付也不会再次扣除材料。按 R 或在菜单里重新开始,会清空这一轮的材料与完成状态,让流程能够从头再试。

2. 把说明和设置收进暂停菜单#
玩法增加后,常驻界面也开始变得拥挤。这一轮加入了暂停菜单,将操作说明与设置分组放进去,重试和继续放在底部。平时的 HUD 保留血量与目标,交互提示只在靠近相应对象时出现。
打开菜单后,世界暂停,界面仍然可以操作。重新开始会重置游戏这一轮的状态,已经保存的画面模式和音量偏好则继续保留。
试玩时还修了一个很小、但手上很容易感觉到的问题:按钮悬停时没有明显反馈。检查后发现,普通、悬停与按下状态共用了同一份背景资源。将状态分开后,鼠标移上去和按下去终于有了可见的区别。
这些调整让说明、设置和游戏画面各有位置,也让反复试玩时的暂停与重试更方便。
3. 从庭院走到外侧空地#
最初的流程仍然发生在同一个庭院里。随后增加了外侧空地,玩家靠近出口按 E,可以在两张地图之间往返。庭院保留店员和交付点,战斗放到外侧空地。
每次进入空地,会随机生成 2~5 个敌人。 生成位置会检查地面、障碍、出入口和其他敌人的出生点,避免角色一出现就挤在一起或堵住出口。采样次数有上限,如果空间不够,就减少生成数量。
多个敌人分别处理受击、死亡与掉落,界面显示最近的存活敌人。原有的攻击和翻滚继续使用,玩家需要在多个预警与接近自己的敌人之间寻找行动时机。
这仍然是平地上的占位战斗场景。敌人还没有寻路和群体避让,当前的生成检查也只服务于这种平地地图,复杂地形与更丰富的敌人行为留待后续。

4. 换一张地图,哪些东西应该留下#
有了地图切换,就必须明确离开一个地方以后,什么继续保留。
当前采用的规则是:
- 玩家带着当前血量、翻滚冷却和受伤保护进入下一张地图,切图会结束正在进行的攻击或翻滚。
- 已经拾取的材料和本轮交付结果继续保留。
- 离开空地时,旧敌人与地上尚未拾取的材料会清除;再次进入时重新生成敌人。
- 按 R 或从菜单重试,会清空整轮状态并回到庭院。
因此,往返地图不会自动恢复血量。想带回咖啡店的材料,需要先捡起来;留在地上的袋子不会等到下一次回来。
实现上,本轮材料与完成状态由一个持续保留的数据对象管理,地图负责自己的敌人和地面掉落。这样,地图被替换时,玩家已经带走的材料不会跟着消失。
这些状态目前只在本轮运行中保留,退出游戏后不会保存。 音量和画面偏好的保存属于另一套设置逻辑。
5. 让店员接过材料#
咖啡店门口原本只有交付标记。这次增加了占位店员,让收集和交付有了对话回应。
店员会根据当前状态显示三种内容:没有材料时说明需求,带着材料时显示交付按钮,完成交付后给出完成回应。玩家不需要先来“接任务”,也可以先去战斗,拿到材料后再回来。
交谈、推进和结束对话使用 E,也可以按 Esc 离开。交付由按钮明确触发,关闭对话不会自动扣除材料。每轮只交付一次、消耗一份;即使手里还有多余材料,再次交谈也会优先显示完成后的回应。
门口标记仍然可以交付,与店员共用同一套数量和完成状态检查,避免从两个入口重复提交。
对话期间世界暂停,并与暂停菜单互斥。界面操作需要隔离游戏输入,避免按键在关闭对话时又落到战斗或重试逻辑里。现在完整的一轮可以这样走:
庭院交谈 → 进入空地 → 战斗 → 逐份拾取 → 返回店员处交付 → 获得回应 → 重试。
店员形象与台词仍用于验证流程,交付还没有奖励,也没有扩展成通用任务系统。

6. 工程里能交谈,导出包却丢了台词#
这次最值得记下来的一次问题出现在导出之后:工程里对话正常,测试包里却只能看到交谈提示,打不开预期的对话。
检查最终打包的数据后发现,说话人名称还在,三组台词数组却都变成了空值。将对话资源里的台词字段从 PackedStringArray 改成 Array[String],重新导出后,台词得以保留,对话与交付流程恢复。
这次修复解决了当前资源的导出问题,但还没有定位到引擎内部原因,不能据此认为所有 PackedStringArray 都会出错。
它也提醒我:工程内检查通过之后,还需要检查最终发出去的包。 后续为两平台最终 PCK 增加了台词数据检查,并从打包资源运行对话与交付验证,确认旧包能够检出问题、修复后的包能够通过。
从庭院出发,走进空地战斗,再带着材料回到店员面前,这条短短的往返路线把原先分散的玩法连了起来。角色和场景还很简陋,交付也只有一句回应,但咖啡店开始有了让玩家回来的理由。接下来,希望能沿着这条路线,慢慢做出战斗之外的生活感。
