拾取&&掉落系统

GIS(通用库存系统)提供了一个高度灵活的道具拾取和掉落系统。本文档将详细介绍这些系统的用法以及如何进行功能扩展。

通用库存系统.封面
罗传月武(YueWu)

作者

罗传月武(YueWu)

专注游戏开发和Web技术。

创建时间: 2025年5月02日更新时间: 2026年9月10日

目录

概述

GIS(通用库存系统)提供了一个高度灵活的道具拾取和掉落系统。本文档将详细介绍这些系统的用法以及如何进行功能扩展。

拾取系统

GIS 默认提供三种拾取系统,分别是道具拾取、库存拾取(Loot)和货币拾取。它们均继承自 GIS_PickupComponent,拥有各自的配置和逻辑。通过调用 Pickup 函数即可完成拾取逻辑。

1. 道具拾取

  • 用途:用于一次性拾取单个道具,例如掉落地面的武器或盔甲。
  • 实现方式
    • 为任意 Actor 添加 GIS_WorldItemComponent 和 GIS_ItemPickupComponent,即可构成一个 ItemPickupActor
    • 组件说明
      • WorldItemComponent:在世界中创建并持有道具实例。
      • ItemPickupComponent:负责将 WorldItem 引用的道具添加到交互者的库存中。

2. 库存拾取(Loot)

  • 用途:用于一次性拾取多种道具,例如游戏中的宝箱或敌人死亡后的遗物。
  • 实现方式
    • 为具备 InventorySystem 组件的 Actor 添加 GIS_InventoryPickupComponent,即可构成一个 InventoryPickupActor
    • 组件说明
      • InventorySystemComponent:配置所有可被拾取的道具。
      • ItemPickupComponent:将指定集合中的道具添加到交互者的库存中。

3. 货币拾取

  • 实现方式
    • 为任意 Actor 添加 GIS_CurrencySystemComponent 和 GIS_CurrencyPickupComponent,即可构成一个 CurrencyPickupActor
    • 逻辑说明
      • 拾取时,会移除拾取物 CurrencySystem 组件上的所有货币,并将其添加到拾取者的 CurrencySystem 组件上。

案例:BP_GIS_ItemPickup 蓝图

单纯使用拾取组件不足以满足游戏需求,在实际应用中,拾取系统需要与交互、UI 以及物品视觉效果等内容配合,提供完整功能。GIS 配套项目已预置相关内容,开箱即用。

以配套项目提供的蓝图 BP_GIS_ItemPickup 为例:

  • 将该蓝图放置到关卡中,并进行相关配置即可使用。
  • 该蓝图包含以下组件:
    • StaticMesh 组件:控制拾取物的视觉效果。
    • Pickup 组件:指定道具拾取到玩家的库存集合,并控制拾取成功/失败的声音反馈。
    • SmartObject 组件:定义 PickupActor 的交互入口,拥有交互系统组件的 Actor(如玩家或 AI)可搜索并与之交互,触发拾取。
    • WorldItem 组件:配置道具定义及其数量,在运行时创建并持有道具实例;拾取成功后,将道具实例添加到玩家指定的库存集合中。
  • 该蓝图支持复用,您也可以参考该蓝图创建自定义版本,例如使用特效而非 StaticMesh 作为视觉表现。

案例:BP_GIS_ItemPickup 蓝图

单纯使用拾取组件不足以满足游戏需求,在实际应用中,拾取系统需要与交互、UI 以及物品视觉效果等内容配合,提供完整功能。GIS 配套项目已预置相关内容,开箱即用。

以配套项目提供的蓝图 BP_GIS_ItemPickup 为例:

  • 将该蓝图放置到关卡中,并进行相关配置即可使用。
  • 该蓝图包含以下组件:
    • StaticMesh 组件:控制拾取物的视觉效果。
    • Pickup 组件:指定道具拾取到玩家的库存集合,并控制拾取成功/失败的声音反馈。
    • SmartObject 组件:定义 PickupActor 的交互入口,拥有交互系统组件的 Actor(如玩家或 AI)可搜索并与之交互,触发拾取。
    • WorldItem 组件:配置道具定义及其数量,在运行时创建并持有道具实例;拾取成功后,将道具实例添加到玩家指定的库存集合中。
  • 该蓝图支持复用,您也可以参考该蓝图创建自定义版本,例如使用特效而非 StaticMesh 作为视觉表现。

提示

你可以在配套项目的演示关卡找到更多的预置蓝图。

掉落系统

GIS 提供两种掉落系统,每种系统根据配置生成不同类型的 PickupActor

  • 所有掉落系统均继承自 GIS_DropperComponent,并可指定掉落生成的 PickupActorClass
  • 需要成为拾取物的 Actor 必须实现 GIS_PickupActorInterface,以便在 DropperComponent 中被正确选择。

1. 道具掉落

  • 实现方式
    • 为已挂载库存组件的敌人、NPC 或场景物件(如罐子)添加 GIS_ItemDropperComponent
    • 在敌人/NPC 死亡或罐子破碎时,调用 DropperComponent 上的 Drop 函数,根据配置规则生成拾取物。
  • 配置选项
    • 从库存的哪个集合中掉落道具。
    • 掉落类型:InventoryPickup(单个 Actor,一键拾取所有)或 ItemPickup(多个 Actor,需分别拾取)。
    • 掉落时的随机半径浮动及掉落原点(可以是掉落者位置或其他 Actor 位置)。

2. 货币掉落

  • 实现方式
    • 为 Actor 添加 GIS_CurrencyDropperComponent
    • 在合适时机调用 Drop 函数,生成对应的货币拾取 Actor

自定义扩展

  • 拾取和掉落系统的核心功能及 API 接口均以组件形式封装。
  • 开发者可通过蓝图或 C++ 继承 GIS_DropperComponent 和 GIS_PickupComponent,查看可继承选项以实现自定义类型的掉落或拾取逻辑。