-
Notifications
You must be signed in to change notification settings - Fork 0
Step 1: Quick Start
Version: 1.5.0
Last Updated: 2026-06-10
Estimated Time: 5-15 minutes
Get a basic Vampire Survivors-style game running quickly.
This guide uses the production-friendly, component-based setup. The included AURFTestPlayer and AURFTestEnemy classes still work for prototyping, but production projects should use their own ACharacter or APawn Blueprints with URF components.
- Right-click in Content Browser -> Blueprint Class
- Search for
URFGameInstance - Name it
BP_URFGameInstance - Open the Blueprint and add PowerUp Data Assets to the Available PowerUps array:
DA_MightDA_MaxHealthDA_MoveSpeed
- Go to Project Settings -> Maps & Modes
- Set Game Instance Class to
BP_URFGameInstance
You do not need to inherit from AURFTestPlayer.
Create your own player from ACharacter or APawn, then add the URF components you need.
The example project includes BP_TestProductionPlayer, a production-style ACharacter example that does not inherit from AURFTestPlayer.
The player does not need to manually register with URFGameDirector. The director automatically uses the pawn possessed by the first PlayerController as the player target.
BP_PlayerCharacter +-- CapsuleComponent or custom collision +-- SkeletalMesh or StaticMesh +-- SpringArmComponent +-- CameraComponent +-- URFHealthComponent +-- URFExperienceComponent +-- URFWeaponComponent +-- URFPlayerStatsComponent +-- URFLevelUpSystem
URFTargetingComponent may also be added if your project uses it directly, but most weapon targeting is handled through URFWeaponComponent.
Add these only if your game uses those systems:
+-- URFCurrencyComponent
+-- URFVacuumComponent
+-- URFPowerUpShopSystem
In URFPlayerStatsComponent:
Stats Data Asset -> DA_DefaultPlayerStats
In URFWeaponComponent:
Starting Weapons
+-- DA_MagicWand
Make sure auto-fire is enabled if you want Vampire Survivors-style automatic attacks.
In URFLevelUpSystem, add weapons to the Available Weapons Pool:
Available Weapons Pool
+-- DA_MagicWand
+-- DA_Knife
+-- DA_Garlic
If you use your own player Blueprint, route Unreal damage into the URF health component.
In the player Event Graph:
Event AnyDamage
-> URFHealthComponent
-> TakeSimpleDamage(Damage, DamageCauser)
Connect `Damage` to `Damage Amount`.
Connect `Damage Causer` to `Damage Source`.
If you use C++, override TakeDamage and call URFHealthComponent::TakeSimpleDamage.
You do not need to inherit from AURFTestEnemy.
Create your own enemy from ACharacter or APawn, then add:
BP_EnemyCharacter
+-- CapsuleComponent or custom collision
+-- SkeletalMesh or StaticMesh
+-- URFHealthComponent
+-- URFEnemyLogicComponent
Optional components:
+-- URFSeparationComponent
URFEnemyLogicComponent contains the reusable enemy-side framework logic:
- Enemy tag setup
- Player target acquisition
- Optional simple follow movement
- Contact damage
- GameDirector registration and unregistration
- XP reward handling
- XP pickup spawning
- Random loot drops
- BlueprintAssignable events
In URFHealthComponent:
Max Health -> 50
Destroy On Death -> true
Destroy Delay -> 0.1
URFEnemyLogicComponent handles rewards and director unregistration. URFHealthComponent can handle actor destruction.
In URFEnemyLogicComponent:
Auto Add Enemy Tag -> true
Auto Enemy Tag -> Enemy
Auto Find Player -> true
Auto Register With Director -> true
XP Reward -> 10
Reward Method -> Direct On Kill
For XP pickup drops instead of direct XP:
Reward Method -> Pickup Only
Guaranteed Pickup Class -> BP_XPPickup
For random loot:
Enable Random Loot -> true
Random Loot Tables -> Add your loot table data asset
Contact damage is disabled by default. Enable it only for enemies that should damage the player by touching them. Contact damage is overlap-based. If the enemy blocks the player capsule instead of overlapping it, contact damage will not fire. The contact damage component should use overlap settings:
Generate Overlap Events -> true
Collision Enabled -> Query Only or Query and Physics
Collision Preset -> Custom
Pawn Response -> Overlap
For an ACharacter enemy:
Enable Contact Damage -> true
Contact Damage Component Name -> CapsuleComponent
Contact Damage -> 10
Damage Interval -> 1.0
You can also set the contact damage component manually in Blueprint:
BeginPlay
-> URFEnemyLogicComponent
-> SetContactDamageComponent(CapsuleComponent)
If you use your own AIController, Behavior Tree, or custom movement, leave simple follow movement disabled.
Enable Simple Follow Movement -> false
For quick prototypes, enable simple follow movement.
There are two movement modes:
MovementInput
Uses Unreal's AddMovementInput. Speed is controlled by the owner's movement component, such as CharacterMovement.MaxWalkSpeed.
DirectActorMovement
Moves the actor directly. FollowSpeed controls units per second. This is closer to the old AURFTestEnemy prototype movement.
Recommended quick prototype setup:
Enable Simple Follow Movement -> true
Follow Movement Mode -> DirectActorMovement
Follow Speed -> 100
Recommended production setup:
Enable Simple Follow Movement -> false
Use AIController, Behavior Tree, or your own movement code
- In your level, add actor:
URFGameDirector - Configure:
Wave Data Asset -> DA_DefaultWaves
Endless Mode -> true
Auto Find And Follow Player -> true
When enabled, `URFGameDirector` uses the pawn possessed by the first `PlayerController` as the spawn target.
- Make sure your wave data uses enemy classes that contain:
URFHealthComponentURFEnemyLogicComponent
- Create Widget Blueprint:
WBP_PlayerHUD - Add:
- Progress Bar for Health
- Progress Bar for XP
- Text Block for Level
In Event Graph:
Event Tick
-> Get Player Health Percentage (Easy UI)
-> Set Health Bar Percent
Event Tick
-> Get Player XP Percentage (Easy UI)
-> Set XP Bar Percent
Event Tick
-> Get Player Level (Easy UI)
-> Format Text ("Level {0}")
-> Set Level Text
Add the widget to the viewport in your player Blueprint:
Event BeginPlay
-> Create Widget (WBP_PlayerHUD)
-> Add to Viewport
Press Play.
You should now have:
- Player with health and XP
- Automatic weapon firing
- Enemies spawning in waves
- Enemies using
URFEnemyLogicComponent - XP rewards or XP pickup drops
- Level-up card selection
- Basic UI showing player stats
After the basic setup works, add the extra systems below.
Add:
URFVacuumComponent
This lets the player collect nearby pickups automatically.
In URFWeaponComponent:
Starting Weapons
+-- DA_MagicWand
+-- DA_Garlic
Max Weapon Slots -> 6
Auto Fire Enabled -> true
In URFLevelUpSystem:
Available Weapons Pool
+-- DA_MagicWand
+-- DA_Knife
+-- DA_Garlic
+-- DA_HolyWand
+-- DA_KingBible
+-- DA_SantaWater
Fallback cards:
Fallback Cards Pool
+-- DA_FallbackHealthRestore
+-- DA_FallbackCurrencyBonus
+-- DA_FallbackXPBonus
Use Fallback Cards -> true
- Create Widget:
WBP_LevelUpMenu - Add 3 buttons for card selection
- Bind to the level-up card selection event.
Basic flow:
On Level Up Card Selection
-> Pause Game
-> Create Widget (WBP_LevelUpMenu)
-> Add to Viewport
-> Display Card Options
Button click flow:
On Card Button Clicked
-> Select Card (Easy UI)
-> Resume Game
-> Remove from Parent
- Create Widget:
WBP_PowerUpShop - Add a scroll box with buttons for PowerUps
Basic flow:
Event Construct
-> Get Shop Items (Easy UI)
-> For Each Shop Item
-> Create Button
-> Set Display Name
-> Set Cost Text
-> Set Enabled (Can Afford AND NOT Is Max Level)
Buy flow:
On Buy Button Clicked
-> Purchase PowerUp (Easy UI)
-> Refresh Shop (Easy UI)
For a production enemy, use:
BP_EnemyCharacter
+-- URFHealthComponent
+-- URFEnemyLogicComponent
+-- URFSeparationComponent (optional)
Recommended health:
Max Health -> 50
Destroy On Death -> true
Destroy Delay -> 0.1
Recommended rewards:
XP Reward -> 10
Reward Method -> Pickup Only
Guaranteed Pickup Class -> BP_XPPickup
Recommended contact damage:
Enable Contact Damage -> true
Contact Damage Component Name -> CapsuleComponent
Contact Damage -> 10
Damage Interval -> 1.0
Contact damage requires overlap events. If the contact component blocks the player instead of overlapping, damage will not fire.
Recommended collision settings:
Generate Overlap Events -> true
Collision Enabled -> Query Only or Query and Physics
Collision Preset -> Custom
Pawn Response -> Overlap
Recommended movement for prototype:
Enable Simple Follow Movement -> true
Follow Movement Mode -> DirectActorMovement
Follow Speed -> 100
Recommended movement for production:
Enable Simple Follow Movement -> false
Use AIController or Behavior Tree
Enhance WBP_PlayerHUD with:
- Timer Display
- Wave Number
- Enemy Count
- Currency Display
- Weapon Slots Display
Example UI update flow:
Event Tick
-> Get Player Health Percentage (Easy UI)
-> Set Health Bar
Event Tick
-> Get Player XP Percentage (Easy UI)
-> Set XP Bar
Event Tick
-> Get Player Level (Easy UI)
-> Set Level Text
Event Tick
-> Get Timer Display String (Easy UI)
-> Set Timer Text
Event Tick
-> Get Current Wave Number (Easy UI)
-> Set Wave Text
Event Tick
-> Get Alive Enemy Count (Easy UI)
-> Set Enemy Text
Event Tick
-> Get Player Run Currency (Easy UI, "Gold")
-> Set Gold Text
Event Tick
-> Get Formatted Weapon Slots Display (Easy UI)
-> Set Weapon Slots Text
Create weapon data assets:
Right-click
-> Data Asset
-> URFWeaponDataAsset
-> Configure weapon name, damage, cooldown, projectile speed, and actor class
Add the new weapon to:
URFWeaponComponent -> Starting Weapons
or:
URFLevelUpSystem -> Available Weapons Pool
Weapons can override targeting settings individually.
Example: Boss-only weapon.
In the weapon data asset:
Override Targeting Settings -> true
Targetable Tags -> Boss
Target Unspecified Actors -> false
Only Fire When Target Available -> true
Result:
- The weapon only targets actors with the
Bosstag. - It does not fire when no boss exists.
- It ignores regular enemies.
Example: Door-only weapon.
Override Targeting Settings -> true
Targetable Tags -> Door
Target Unspecified Actors -> false
Only Fire When Target Available -> true
In a weapon data asset:
Evolution Config
Required Level -> 8
Required Passive -> BP_EmptyTome
Evolved Weapon -> DA_HolyWand
Create character stats data assets:
Right-click
-> Data Asset
-> URFPlayerStatsDataAsset
-> Configure Max Health, Move Speed, Might, Area, Cooldown, etc.
In character selection UI:
For Each Character Data Asset
-> Get Character Name
-> Set Button Text
-> Get Character Icon
-> Set Button Icon
-> Get Character Combat Stats
-> Set Stats Text
On Button Click
-> Get URFCharacterSelectionSubsystem
-> Set Selected Pawn Class
Option 1: Spawn boss when time limit is reached.
On Time Limit Reached
-> Spawn Actor (BP_BossEnemy)
-> Play Boss Music
Option 2: Spawn boss at a specific time.
On Game Time Updated
-> Branch (Current Time >= 600.0)
-> Spawn Actor (BP_MiniBoss)
For boss-only weapons, make sure your boss actor has the Boss tag and configure the weapon with Targetable Tags -> Boss.
Get URFProjectilePoolSubsystem
-> Pre Warm Pool (BP_MagicWandProjectile, 50)
Get URFPickupPoolSubsystem
-> Pre Warm Pool (BP_XPPickup, 100)
Spawn Settings Override
Layer 1 Radius -> 800
Layer 2 Radius -> 2000
Layer 3 Radius -> 3500
Layer 4 Radius -> 4500
Create BP_CustomPickup based on URFPickupActor
-> Set Pickup Type: Custom
-> Set Custom Data Tag: PowerUp
-> Set Custom Int Value: 1
On Custom Collected
-> Branch (Tag == PowerUp)
-> Apply PowerUp Effect
Create BP_CustomWeapon based on URFProjectileActor
-> On Projectile Hit
-> Apply Custom Effect
-> Spawn VFX at Hit Location
On Wave Started
-> Calculate Difficulty
-> For Each Enemy in Wave
-> Multiply Enemy Health
-> Multiply Enemy Damage
Check:
-
URFWeaponComponent -> Auto Fire Enabledis true - The weapon data asset is valid
- The weapon has a valid actor class if required
- The weapon cooldown is not too high
- There are valid targets in range
- If using per-weapon targeting, the target actor has the required class or tag
- If
Only Fire When Target Availableis enabled, at least one valid target exists
Check:
- Enemy has
URFHealthComponent - Enemy has the correct target tag, usually
Enemy - Weapon targeting filters allow this enemy
- Enemy collision is enabled
- The weapon actor applies damage through URF health or Unreal damage routing
For production enemies, either:
URFHealthComponent -> Destroy On Death -> true
or:
URFEnemyLogicComponent -> Handle Actor Destruction -> true
Recommended setup:
URFHealthComponent -> Destroy On Death -> true
URFEnemyLogicComponent -> Handle Actor Destruction -> false
If using simple follow movement:
- Check
Auto Find Playeris true - Check
Target Search Radiusis large enough - Check
Enable Simple Follow Movementis true - For quick prototypes, use:
Follow Movement Mode -> DirectActorMovement
Follow Speed -> 100
If using MovementInput mode:
- Make sure the owner is a Pawn or Character
- Make sure movement is configured
- For Character, check
CharacterMovement -> Max Walk Speed - If needed, set
Auto Possess AI -> Placed in World or Spawned
Check:
-
Enable Contact Damageis true -
Contact Damage Component Namematches the collision component name - For Character enemies, use:
Contact Damage Component Name -> CapsuleComponent
- Collision generates overlap events
- Player has
URFHealthComponentor supports Unreal damage
Check:
- Player has
URFExperienceComponentfor XP pickups - Player has
URFCurrencyComponentfor currency pickups - Player has
URFHealthComponentfor health pickups - Pickup collision is enabled
-
URFVacuumComponentis configured if using automatic pickup collection
Check:
-
URFLevelUpSystem -> Available Weapons Poolhas weapons -
URFExperienceComponentis gaining XP - UI widget is bound to the level-up selection event
- Enable
Use Fallback Cardsif the weapon pool is empty
Check:
-
URFGameDirector -> Wave Data Assetis set -
Is Activeis true - Spawn target is valid, or
Auto Find And Follow Playeris enabled - Wave data has valid enemy classes
- Enemy classes include required components
Check:
-
URFGameInstance -> Available PowerUpshas PowerUp data assets -
URFPowerUpSubsystemis initialized -
URFCurrencySubsystemhas currency - PowerUp is not already at max level
Content/
+-- Blueprints/
| +-- BP_URFGameInstance
| +-- BP_Player
| +-- BP_Enemy
| +-- BP_GameDirector
+-- UI/
| +-- WBP_PlayerHUD
| +-- WBP_LevelUpMenu
| +-- WBP_PowerUpShop
+-- DataAssets/
| +-- Weapons/
| | +-- DA_MagicWand
| | +-- DA_Knife
| | +-- DA_Garlic
| +-- PowerUps/
| | +-- DA_Might
| | +-- DA_MaxHealth
| +-- Characters/
| | +-- DA_DefaultPlayerStats
| +-- Waves/
| +-- DA_DefaultWaves
+-- Pickups/
+-- BP_XPPickup
+-- BP_GoldPickup
+-- BP_HealthPickup
- Use Easy UI functions. They automatically find player/director references.
- Start with the 5-minute setup, then add advanced features.
- Test after each step.
- Use pooling for projectiles and pickups.
- Use Data Assets to create weapon and character variants.
- Enable debug logging in components when troubleshooting.
- Use
AURFTestPlayerandAURFTestEnemyfor quick prototypes only. - Use your own
ACharacterorAPawnplus URF components for production.
-
Complete Blueprint Reference:
FRAMEWORK_BLUEPRINT_REFERENCE.md -
Example Weapons Guide:
EXAMPLE_WEAPONS_GUIDE.md -
PowerUp Shop Guide:
POWERUP_SHOP_QUICKSTART.md -
Character Selection Guide:
CHARACTER_SELECTION_QUICKSTART.md -
Weapon Configuration:
WEAPON_CONFIGURATION_TROUBLESHOOTING.md
Congratulations! You now have a functional Vampire Survivors-style roguelike game.
For detailed information on any system, refer to the Complete Blueprint Reference Guide.
Happy game making!