# 水培菜架种植系统(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 失败原因(示例): - 正在生长 - 缺少种植材料 - 背包已满