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

4.1 KiB
Raw Permalink Blame History

水培菜架种植系统(HydroponicsGrowRack)技术参考

本文档描述 HydroponicsGrowRack 的运行机制、Inspector 配置方式,以及它如何接入当前项目的交互与背包系统。

相关:

1. 总览

目标流程:

  • 交互消耗材料 -> 种植开始 -> 成长(期间禁止收获)-> 成熟等待 -> 交互收获 -> 背包获得产出

接入方式:

  • 该脚本同时实现 IInteractableInteractConditionBehaviour
    • 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

失败原因(示例):

  • 正在生长
  • 缺少种植材料
  • 背包已满