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

87 lines
3.5 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.
## 玩家三维数值条(Thirst / Hunger / Sanity)接入说明
目标:在不修改 ThirdParty(Reach UI)脚本的前提下,实现三项数值随时间衰减、可被事件/物品即时增减,并通过 Reach 的 HUD Health Bar 显示。
### 一、脚本清单
新增:
- [PlayerVitalsSystem.cs](file:///e:/Unity/Unity%20Program/Test_2022/Assets/_Project/Scripts/Player/PlayerVitalsSystem.cs)
- [VitalStat.cs](file:///e:/Unity/Unity%20Program/Test_2022/Assets/_Project/Scripts/Player/VitalStat.cs)
- [VitalsHUD.cs](file:///e:/Unity/Unity%20Program/Test_2022/Assets/_Project/Scripts/UI/VitalsHUD.cs)
修改:
- [ItemData.cs](file:///e:/Unity/Unity%20Program/Test_2022/Assets/_Project/Scripts/Inventory/ItemData.cs)
- [ItemUsageSystem.cs](file:///e:/Unity/Unity%20Program/Test_2022/Assets/_Project/Scripts/Player/ItemUsageSystem.cs)
### 二、场景/Hierarchy 操作步骤(你现在的 Statebars 结构继续用)
#### 1) 在 Player 上挂载数值系统
1. 选中 Player(挂了 `PlayerController` / `ItemUsageSystem` 的那个对象)
2. Add Component`PlayerVitalsSystem`
3. 在 Inspector 中配置三项(Thirst/Hunger/Sanity):
- `maxValue`:例如 100
- `currentValue`:例如 100
- `decayPerMinute`:按你的设计填(比如 Hunger 12Sanity 3Thirst 6
4. 阈值效果(可选,先留空也行):
- 展开 `thresholds`
- 添加一条或多条阈值(0~1
-`onEnter/onExit` 里后续可绑定相机抖动、眩晕、GameOver 等事件
#### 2) 在 UI 上绑定三条 Reach Bar
你已经在 Canvas 下创建了 `Statebars`,并从 Reach UI > HUD > Health Bar 创建了 3 条。
1.`Statebars` 或 Canvas 下新增一个组件载体(推荐直接用 `Statebars`
2. Add Component`VitalsHUD`
3. 把引用拖进去:
- `Target`:拖入 Player 上的 `PlayerVitalsSystem`
- `Thirst Bar / Hunger Bar / Sanity Bar`:分别拖入三条 Reach Health Bar(组件类型是 `Michsky.UI.Reach.ProgressBar`
运行时 `VitalsHUD` 会把三项数值的 min/max/current 同步到三条 Reach Bar,并在数值变化时自动刷新 UI。
#### 3) 让 ItemUsageSystem 驱动消耗品对三维的影响
`ItemUsageSystem` 已接入:
1. 选中 Player 上的 `ItemUsageSystem`
2. 看到 Inspector 里新增了 `Vitals System` 字段:
- 推荐手动拖入 Player 上的 `PlayerVitalsSystem`(最稳)
- 不拖也可以,它会在运行时自动尝试找到实例
#### 4) 配置消耗品的数值改变量
在每个消耗品 `ItemData`ScriptableObject)里新增了三项:
- `thirstDelta`
- `hungerDelta`
- `sanityDelta`
示例:
- 食物:`hungerDelta = +20``sanityDelta = +2`
- 药物:`thirstDelta = +25``sanityDelta = -5`
- 毒药:`thirstDelta = -30`
### 三、运行验证(最小闭环)
1. 进入 Play Mode
2. 不做任何操作,观察 Hunger/Sanity 是否按 `decayPerMinute` 下降,UI 是否同步下降
3. 在背包里放入一个配置了 delta 的 Consumable,按 Use 使用
4. 观察三条数值是否按配置立刻变化,且 UI 同步
### 四、常见问题
#### 1) UI 不动
- 检查 `VitalsHUD` 是否引用到了正确的三条 Reach BarProgressBar 组件)
- 检查 `VitalsHUD.target` 是否指向 Player 上的 `PlayerVitalsSystem`
- 检查 Player 是否真的在场景里只有一个 `PlayerVitalsSystem`(若多个可能被单例销毁其一)
#### 2) 数值变化但条显示不对
- 确认 `maxValue``PlayerVitalsSystem` 里配置正确(Reach 的 fillAmount 依赖 current/max
- 确认条的 `minValue/maxValue` 没被别的 UI 脚本覆盖