4.1 KiB
4.1 KiB
水培菜架种植系统(HydroponicsGrowRack)技术参考
本文档描述 HydroponicsGrowRack 的运行机制、Inspector 配置方式,以及它如何接入当前项目的交互与背包系统。
相关:
1. 总览
目标流程:
- 交互消耗材料 -> 种植开始 -> 成长(期间禁止收获)-> 成熟等待 -> 交互收获 -> 背包获得产出
接入方式:
- 该脚本同时实现
IInteractable与InteractConditionBehaviourCanInteract(...):决定“此刻能否互动”与失败原因Interact():只做状态推进(开始种植 / 执行收获并清空)OnInteractSucceeded(...):在玩家侧确认交互成功后,执行“扣材料/加产出/触发事件”
2. 预制体层级要求
推荐把脚本挂在“菜架根节点”,其子节点为各成长阶段模型:
hydroponics_H02_lettuce ├─ hydroponics_H02_lettuce_lamp ├─ hydroponics_H02_lettuce_S1 ├─ hydroponics_H02_lettuce_S2 ├─ hydroponics_H02_lettuce_S3 └─ hydroponics_H02_lettuce_S4
阶段子物体要求:
- 脚本只会在任意时刻启用一个阶段(Growing/Mature),其余阶段会被禁用
- 阶段对象建议命名包含
_S(用于自动收集)
交互碰撞体要求:
- 玩家交互射线需要命中某个 Collider(通常放在根节点),并且对象 Layer 必须在玩家的
interactLayer掩码内
3. Inspector 配置字段
3.1 物品配置
- Plant Costs:种植消耗列表(可添加多条)
- Item:消耗的
ItemData - Amount:消耗数量
- Item:消耗的
- Harvest Rewards:收获产出列表(可添加多条)
- Item:产出的
ItemData - Amount:产出数量
- Item:产出的
交互校验规则:
- 空置时:需要 Plant Costs 全部满足才允许互动
- 成熟时:需要背包能容纳 Harvest Rewards 全部内容才允许互动
3.2 事件
- On Harvested:收获成功事件
- 触发时机:所有收获产出成功加入背包后触发
- 用途示例:播放音效、刷新 UI、触发任务计数、触发旁白等
3.3 成长配置
- Growth Stages:阶段子物体列表(按顺序)
- Stage Durations Seconds:每阶段持续时间列表
- 若长度等于阶段数,则逐阶段按该时间推进
- 否则使用 Total Grow Seconds 平均分配到各阶段
- Total Grow Seconds:总成长时间(用于均分模式)
工具:
- 组件右上角菜单:Auto Fill Growth Stages From Children
- 自动从子物体中收集名字包含
_S的对象,并按名称排序填入 Growth Stages
- 自动从子物体中收集名字包含
4. 运行时初始化(防止开局“回到初始状态”)
进入 Play 时脚本会做一次初始化,用于尊重你在场景里手动摆好的阶段显示:
- 若 Growth Stages 中存在任意一个阶段子物体在场景初始就是激活的:
- 该阶段会被视为“开局阶段”(脚本会把其它阶段关闭,仅保留该阶段)
- 若激活的是最后一个阶段:开局视为 Mature
- 否则:开局视为 Growing,并从该阶段继续计时推进到 Mature
- 若所有阶段子物体开局都是关闭的:脚本按 Inspector 的 State 初始化(Empty/Growing/Mature)
4. 状态机与行为细节
状态:
- Empty:空置
- Growing:生长中(禁止互动)
- Mature:成熟(允许收获)
行为:
- 玩家第一次交互(Empty -> Growing)
Interact()将状态切到 Growing 并显示第 0 阶段- 交互成功回调时消耗 Plant Costs
- 生长推进(Growing)
- Update 根据
plantedAtTime与阶段时长自动切换启用的阶段子物体 - 达到总时长后进入 Mature
- Update 根据
- 玩家收获(Mature -> Empty)
Interact()将状态重置为空置并隐藏所有阶段- 交互成功回调时添加 Harvest Rewards,并触发 On Harvested
失败原因(示例):
- 正在生长
- 缺少种植材料
- 背包已满