Files
Echo/Assets/_Project/Docs/HydroponicsGrowRack_Technical_Reference.md
T
2026-07-08 20:42:51 +08:00

102 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 水培菜架种植系统(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
失败原因(示例):
- 正在生长
- 缺少种植材料
- 背包已满