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