用途
该技能用于在 Godot 4 中实现数据驱动的资源采集循环,涵盖挖矿、伐木、采集等玩法。核心目标是把采集逻辑与数值配置解耦:工具类型、等级、产出范围、掉落场景等均由 Resource(.tres)承载,脚本只负责执行命中校验、产出结算、耗尽表现与重生持久化。
主要能力
- 命中与产出校验:玩家射线/交互后调用
apply_hit(tool_data: HarvestToolData),由工具枚举与等级决定是否可采集,失败时给出"wrong_tool"/"low_tier"反馈。 - 数据驱动配置:使用
HarvestResourceData/HarvestToolData作为可共享的.tres资产,配置工具枚举与等级、产出范围、可选掉落场景,便于设计师在不改动采集脚本的情况下调参。 - 采集节点表现:
harvestable_node.gd挂载于StaticBody3D,支持 mesh 摇晃、耗尽后切换碰撞层。 - 世界持久化:
harvest_respawn_manager.gd作为 Autoload(HarvestRespawnManager)记录已耗尽节点,实现跨场景的重生与持久化。 - 离线进度与自动保存:基于
Time.get_unix_time_from_system()持久化时间戳以计算离线收益;通过harvest_autosave_manager.gd以间隔写入user://自动保存,使采集进度在非手动保存时也能留存。 - 矿脉程序化生成:使用
FastNoiseLite阈值在noise.get_noise_2dv(pos) > threshold处生成HarvestableNode,形成有机簇状分布,并通过重生管理器持久化已耗尽 ID。 - 工具耐久:耐久度保存在
HarvestToolData(Resource)而非玩家节点上,命中成功后由工具 Resource 发出耐久/损坏信号。
使用方式
- 创建
HarvestResourceData/HarvestToolData的.tres资产(工具枚举 + 等级、产出范围、可选掉落场景)。 - 将
harvestable_node.gd挂载到StaticBody3D,指定数据与mesh_to_shake,交互保持在 Layer 1。 - 需要世界持久化时,将
harvest_respawn_manager.gd注册为 Autoload,名为HarvestRespawnManager。 - 命中路径示例:
if collider is HarvestableNode:
collider.apply_hit(player_tool)
- 信号接线:
| Signal | Payload | Wire to |
|---|---|---|
harvested |
(data, amount) |
Inventory / harvest_inventory_manager |
took_damage |
(curr, max) |
HUD bar / popup pool |
interaction_failed |
(reason: StringName) |
"wrong_tool" / "low_tier" 反馈 |
关键约束
- 累计采集数量必须使用
int,不要用 float。 - 连续采集速率必须在
_process/_physics_process中乘以delta,避免经济随帧率变化。 - 离线进度必须使用
Time.get_unix_time_from_system(),不要用OS.get_ticks_msec()。 - 工具类型判断需使用
HarvestToolData.ToolType/StringName枚举,不要用自由字符串。 - 运行时修改耐久/生命前需
duplicate(true),避免改写共享 Resource 模板。 - 不要在 VFX/SFX 播放完成前
queue_free();应先隐藏 mesh、切换碰撞层,播完再释放。 - 退出时必须保存 UNIX 时间戳,否则离线收益无法计算。
- 采集逻辑不要与 UI 计数器耦合,只通过信号通信。
- 不要非均匀缩放碰撞形状,应直接编辑形状资源尺寸。
适用场景
适合需要资源采集核心循环的 Godot 4 项目,例如生存类、采集/拾荒类玩法,可作为采集、库存、经济等系统的底层模块,并可与程序化生成、蒙特卡洛数值平衡等后续环节衔接。
限制与暂未提供
该资料未说明适用的 Godot 具体小版本范围、授权方式、安装命令与收费信息,这些内容暂未提供。