Files
Echo/Assets/_Project/Docs/HydroponicsGrowRack_Technical_Reference.md
T

102 lines
4.1 KiB
Markdown
Raw Normal View History

2026-07-08 19:53:15 +08:00
# 水培菜架种植系统(HydroponicsGrowRack)技术参考
本文档描述 `HydroponicsGrowRack` 的运行机制、Inspector 配置方式,以及它如何接入当前项目的交互与背包系统。
相关:
- 交互系统总览:[InteractionSystem_Technical_Reference.md](file:///e:/Unity/Unity%20Program/Test_2022/Assets/_Project/Docs/InteractionSystem_Technical_Reference.md)
- 脚本实现:[HydroponicsGrowRack.cs](file:///e:/Unity/Unity%20Program/Test_2022/Assets/_Project/Scripts/Interaction/HydroponicsGrowRack.cs)
## 1. 总览
目标流程:
- 交互消耗材料 -> 种植开始 -> 成长(期间禁止收获)-> 成熟等待 -> 交互收获 -> 背包获得产出
接入方式:
- 该脚本同时实现 `IInteractable``InteractConditionBehaviour`
- `CanInteract(...)`:决定“此刻能否互动”与失败原因
- `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:消耗数量
- Harvest Rewards:收获产出列表(可添加多条)
- Item:产出的 `ItemData`
- Amount:产出数量
交互校验规则:
- 空置时:需要 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
- 玩家收获(Mature -> Empty
- `Interact()` 将状态重置为空置并隐藏所有阶段
- 交互成功回调时添加 Harvest Rewards,并触发 On Harvested
失败原因(示例):
- 正在生长
- 缺少种植材料
- 背包已满