Implementation to your project

1. Add BPAC_GatheringComponent to place of your choice (Character or PlayerState).

2. Add Interface (BPI_GetMesh) to your character class and pass skeletal mesh to get Pawn Mesh function. To add Interface you have to select ClassSettings and in right DetailsPanel find Interfaces tab.

3. Add Interface (BPI_GetComponents) to your Character Class and to Player Controller! and pass GatheringComponent to GetGatheringComponent function. Inside project i commented those functions if you find it is problematic how to pass component.

4. Add DT_Gathering_System_GameplayTags to Project Settings/GameplayTags/Gameplay Tag Table List.

5. If you have your own character with AnimationBlueprint copy AnimNotifies from the ABP connected to DemoCharacter into your AnimationBP.

Do not forget if you have your own animation to add those anim notifies into your gathering montage

6. In BPAC_GatheringComponent in Animations tab be sure to set up correct socket to attach the tool. This socket should match the socket in your SkeletalMesh position to which attach the tool.



This system allows developers to add numerous types of resources, with varying levels and enchantments, as well as requirements to "Gather" them, it also manages gathering tools,durability and other necessary interactions for that sort of activity. Furthermore, the product has a BonusGame component that may provide the player with extra resources. Everything was created with adaptability and flexibility in mind. It only takes a few clicks to implement and add new features.

Product support MULTIPLAYER.

UE Marketplace Product Link


Find the tool and gather resource

Bonus Game

Appear randomly while gathering (Chance can be determined)

Multiplayer Gathering

Multiplayer preview

Bonus Game Multiplayer Notification

Multiplayer preview



This section will shortly describe all important classes, as well as their public interface.


Gathering Component main job is managing gathering accesibility ( GameplayTags ), currently using tool or animations that can be assigned per resource type.

Anim MontageGatheringCrystalMontageMontage to be used, while using Crystal Tool
Anim MontageGatheringStoneMontageMontage to be used, while using Stone Tool
Anim MontageGatheringGoldMontageMontage to be used, while using Gold Tool
NameGatheringToolSocketNameSocket to which tool should be attached


Main Actor class for any type of resource. Contains logic for interactions, initializing effects and meshes. Data like mesh, sound effect or min/max gathered resource are filled via DataTable.

FloatVFXBoundSizeAdditional size to enchantment VFX
FloatMultiplicationGatheredBonusMultiply gathered resource
IntFlatGatheredBonusFlat additional gathered resource
EnumResourceNamesType of resource to match row in DT_GatheringSystem
IntOverrideEnchantmentIf -1 do nothing other way override enchant
FloatNotificationWidgetCooldownTimerCooldown of Can't Gather notification widget in seconds.


DataTable connected with class

EnumNameType of resource, to easier identify. Should be same as row name!
StaticMeshStaticMeshStatic mesh that represent resource
ClassDestroyableMeshDestroyed mesh class once resource is destroyed
Map Int | FloatEnchanment/ProbabilityProbability of each enchantment tier
GameplayTagTagToGatherGathering gameplay tag required to gather this resource
IntMaxHealthMax health of this resource
IntBaseGatheredAmountBase gathered amount e.g 5
IntDeltaVarriationAmounte.g 2, if base is 5 possible amount will be range 3 to 7
IntResourceTierResource Tier ( Don't mistake with Enchantment Tier which probability is determined in Map)
SoundBaseOnHitSoundSound that will be played on hit received
SoundBaseOnDestroySoundSound that will be played on resource destroyed
Texture2DIconImage represetnting item in inventory


Main Actor class for any type of gathering tool. Tool trace for interactions, managing durability, contains gather acces tags, meshes and pickup logic. Data filled from DataAssets


Data Asset connected with class

EnumGatheringTypeType of resource
GameplayTagGatheringTagGathering acces tags will be added once tool is in use
StaticMeshStaticMeshMesh representing the tool
NiagaraSystemVFXNiagara system floating around mesh
IntDurabilityBase durability of tool
Texture2DIconImage represetnting item in inventory


Component responsible for managing all stuff related to game. Spawning widgets, game speed, bonus rewards etc. Can be easly add to any actor for BonusGame.

BoolTurnGame ON/OFFShould game be even consider to play
FloatChangeForBonusGameChance for bonus game to occur
FloatGameSpeedSpeed of the played bonus game
BoolRandomPointEveryGameShould game randomize desired hit point every instnace
FloatDesiredStopValueIf RandomPointEveryGame is false, this value will be used as hit point reference
IntGameTimeMaximum(S)Maximum time in seconds, that bonus game will be running without player reaction
FloatRewardLevel4Bonus game value ( e.g multiplication of resources ) based of result
FloatRewardLevel3Bonus game value ( e.g multiplication of resources ) based of result
FloatRewardLevel2Bonus game value ( e.g multiplication of resources ) based of result
FloatRewardLevel1Bonus game value ( e.g multiplication of resources ) based of result
IntStepsSteps for calculating the result of the game
UserWidgetWidgetIndicatorClassWidget indicator class that appear on top of player head, once game started for every player around him
FloatIndicatorWidgetHeightHeight of which indicator should be spawned


Questions and answers

Important Notes


Inventory system in this project are only for presentation purpose

Product compatible with UE 5.0 +

Product design structure may change in time as i grow as developer and decide to remake the project, but the core idea will not change, just implementation