货币&&商店系统

avatar`
Yuewu(罗传月武)
Updated: Jul 23, 2025

概述

通用库存系统(GIS)中,提供完整的货币和商店系统,为你打造游戏中的经济系统提供基础。

货币系统

货币系统组件

为了让游戏中的单位持有货币,你需要添加GIS_CurrencySystemComponent组件,并为其添加默认持有的货币。

货币系统.组件默认设置

货币定义

创建类型为GIS_CurrencyDefinition的数据资产,即可添加新的货币类型。

货币系统.定义货币

为道具添加货币

为了让道具能够在商店中进行购买/销售,你需要为道具定义添加“Shoppable Settings”片段,并分别为其指定购买所需货币,以及销售所得货币。

货币系统.为道具添加货币


货币系统API

这些API允许你通过货币系统对货币进行增删改查。你可以通过GIS|CurrencySystem过滤出所有货币系统的API。

货币UI

GIS提供可复用的WB_GIS_CurrencyContainer控件,它可以:

  • 监听任意Actor上货币系统的指定货币的变动,并展示其数量。
  • 支持垂直/水平展示。
  • 支持当前值/最大值或仅显示当前值。
  • 也可以仅作用于静态展示(如展示制作物品所需货币)
货币系统.UI货币容器

基本上你可以将其用各种各种需要展示货币信息的Widget上。

商店系统

GIS提供多人联机交互商店,允许玩家同时与商人进行买和卖。

商店系统组件

若要在游戏内构建一个可交易NPC,需要:

  • GIS_InventorySystemComponent:存放商店所有可售卖道具。
  • GIS_CurrencySystemComponent:存放商店持有的货币用于结算。
  • GIS_ShopSystemComponent:用于商店购买/销售逻辑。

同时买家(通常是玩家)则需要:

  • GIS_InventorySystemComponent:用于接受购买的道具/消耗卖出的道具。
  • GIS_CurrencySystemComponent:用于支付购买费用/接收销售费用。
商店系统.组件默认设置

商店系统组件仅处理逻辑,无需过多设置,你可以查看配套项目中的BP_GIS_Vendor来了解完整设置。

商店API

你可以通过GIS|ShopSystem访问所有的商店API。

通常,你只需要在“交易”相关的交互逻辑中调用这些API,查看GA_GIS_Interaction_Vendor以了解更多。

价格浮动机制

每一个ShopSystem可以指定价格修改器,即买家购买/销售物品时的整体价格浮动,你可以在此之上实现:

  • 商人在不同区域对不同类型物品的价格不一样,实现跑商机制。
  • 玩家与某商人好感度不一样也会影响价格。

对于动态价格浮动,你只需要实现如下函数即可:

1 /**
2 * Gets the buy price modifier for the buyer.
3 * 获取买家的购买价格浮动。
4 * @param BuyerInventory The buyer's inventory component. 买家的库存组件。
5 * @return The buy price modifier. 购买价格浮动值。
6 * @details Can be overridden to implement a dynamic pricing system based on game mechanics. 可覆写以基于游戏机制实现动态价格系统。
7 */
8 UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category="GIS|ShopSystem")
9 float GetBuyModifierForBuyer(UGIS_InventorySystemComponent* BuyerInventory) const;
10
11 /**
12 * Gets the sell price modifier for the seller.
13 * 获取卖家的出售价格浮动。
14 * @param SellerInventory The seller's inventory component. 卖家的库存组件。
15 * @return The sell price modifier. 出售价格浮动值。
16 * @details Can be overridden to implement a dynamic pricing system based on game mechanics, such as supply shortages. 可覆写以基于游戏机制(如缺货)实现动态价格系统。
17 */
18 UFUNCTION(BlueprintCallable, BlueprintNativeEvent, Category="GIS|ShopSystem")
19 float GetSellModifierForSeller(UGIS_InventorySystemComponent* SellerInventory) const;

商店菜单

购买和销售菜单只是WB_GIS_InventoryMenu(库存菜单)的变体,在“交易”上下文中,其显示和逻辑有一定区别。

GIS同时还提供WB_GIS_ShopMenu(商店菜单),作为Modal存在,允许你对购买/销售的物品进行二次确认,同时也显示你会获得或者需要支付的货币。

商店系统.商店菜单


logo_small
罗传月武

© 罗传月武 @2025 版权所有.