建筑成本系统¶
建筑成本系统用于检查建造条件,并在建筑确认后消耗资源。
插件不限制资源类型。背包物品、金币、角色属性或其他资源,都可以通过自定义 Building Cost Evaluator 接入。
处理流程¶
客户端评估仅用于 UI 显示和本地预检查。最终检查与资源消耗应由服务器执行。
Cost Set¶
Building Cost Set 是建筑使用的成本配置资产,可以包含多个 Cost Entry。
例如:
| 成本 | 数量 |
|---|---|
| 木材 | 20 |
| 石材 | 10 |
| 金币 | 100 |
创建后,将其配置到 Building Data Asset 的 Cost Set。
未配置 Cost Set 时,插件不会执行成本检查,适合创造模式、管理员建造或由项目自行处理成本的情况。
Cost Entry¶
每个 Cost Entry 表示一项成本。
| 字段 | 说明 |
|---|---|
Evaluator Class |
处理当前成本的 Evaluator。 |
Target Data |
资源、物品或其他目标数据。 |
Amount |
需要检查和消耗的数量。 |
同一个 Evaluator 可以根据 Target Data 处理多个目标,例如 Wood、Stone 和 Iron,不需要为每种资源创建单独的类。
Evaluator¶
Building Cost Evaluator 用于对接项目自己的资源系统,主要负责:
| 操作 | 说明 |
|---|---|
Can Afford |
检查当前资源是否满足要求。 |
Consume |
建筑确认后消耗资源。 |
Evaluate for UI |
生成 UI 显示内容和失败原因。 |
项目可以分别创建背包、货币、属性或仓库 Evaluator。
默认 Evaluator¶
可以在以下位置注册默认 Evaluator:
每条规则包含:
| 字段 | 说明 |
|---|---|
Cost Type Tag |
成本类型。 |
Evaluator Class |
对应的默认 Evaluator。 |
例如:
| Cost Type Tag | Evaluator Class |
|---|---|
Building.Cost.Resource |
BP_ResourceCostEvaluator |
Building.Cost.Currency |
BP_CurrencyCostEvaluator |
Building.Cost.Item |
BP_ItemCostEvaluator |
当 Cost Entry 未直接指定 Evaluator 时,系统可以根据成本类型查找默认实现。
其他设置请参阅 插件设置。
Cost Context¶
执行成本检查时,Evaluator 会收到当前建造上下文,例如:
- Player Controller
- 当前世界
- Building Data
- Build Component
Evaluator 需要根据这些信息找到玩家的背包、货币或其他资源数据。
Note
插件不会限制资源组件必须位于 Pawn、Player State 或其他对象中,具体获取方式由 Evaluator 决定。
UI 评估¶
Evaluate for UI 可以生成:
- 当前数量
- 需要数量
- 成本显示文本
- 是否满足条件
- 失败原因
例如:
UI 评估不应消耗资源。
多人游戏¶
建造确认时,服务器应按照以下顺序处理:
客户端不能直接决定资源是否足够,也不能执行最终资源消耗。
建筑创建失败时,不应消耗资源。
自定义 Evaluator¶
自定义 Evaluator 通常需要:
- 从 Cost Context 获取玩家。
- 从 Cost Entry 读取目标和数量。
- 查询项目资源系统。
- 返回检查结果和失败原因。
- 为 UI 生成显示信息。
- 在服务器确认阶段消耗资源。
完成后,可以直接配置到 Cost Entry,或注册为默认 Evaluator。
示例¶
以下示例通过自定义 Player State 检查并扣除金币。
Can Afford¶

Consume¶

Evaluate for UI¶

常见问题¶
| 问题 | 检查内容 |
|---|---|
| 始终显示资源不足 | 检查 Evaluator 是否正确获取玩家和资源数据。 |
| 找不到 Evaluator | 检查 Evaluator Class 和默认 Evaluator 规则。 |
| UI 没有显示成本 | 检查 Evaluate for UI。 |
| 建造后没有扣除资源 | 检查服务器是否执行 Consume。 |
| 重复扣除资源 | 确保 Consume 只在服务器确认阶段执行一次。 |
| 建造失败仍扣除资源 | 检查验证、消耗和创建建筑的执行顺序。 |