货币&&商店系统

概述
通用库存系统(GIS)中,提供完整的货币和商店系统,为你打造游戏中的经济系统提供基础。
货币系统
货币系统组件
为了让游戏中的单位持有货币,你需要添加GIS_CurrencySystemComponent
组件,并为其添加默认持有的货币。

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

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

货币系统API
这些API允许你通过货币系统对货币进行增删改查。你可以通过GIS|CurrencySystem
过滤出所有货币系统的API。
货币UI
GIS提供可复用的WB_GIS_CurrencyContainer
控件,它可以:
- 监听任意Actor上货币系统的指定货币的变动,并展示其数量。
- 支持垂直/水平展示。
- 支持当前值/最大值或仅显示当前值。
- 也可以仅作用于静态展示(如展示制作物品所需货币)

基本上你可以将其用各种各种需要展示货币信息的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;1011 /**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存在,允许你对购买/销售的物品进行二次确认,同时也显示你会获得或者需要支付的货币。
