-
Notifications
You must be signed in to change notification settings - Fork 0
Step 2: Character Selection
- Overview
- Quick Start
- Creating Character Data Assets
- Creating Character Selection UI
- Function Reference
- Example Usage Scenarios
- Troubleshooting
The Character Selection System allows players to choose between different character classes. Each character has different stats (Health, Speed, Damage, etc.).
- ✅ Easy UI-like simple functions
- ✅ Character identity (name, description, icon)
- ✅ Individual stat getters (health, speed, damage, etc.)
- ✅ Formatted text output (ready for UI)
- ✅ No component reference required (static functions)
- ✅ Blueprint-friendly
- URFPlayerStatsDataAsset: Character definitions (stats, identity)
- URFCharacterSelectionLibrary: Easy UI functions (static)
- URFPlayerStatsComponent: Stats management on player
- Right-click in Content Browser → Miscellaneous → Data Asset
- Select URFPlayerStatsDataAsset
- Name it (e.g.,
DA_Character_Warrior) - Open the asset and configure settings
- Create User Interface → Widget Blueprint
- Add character buttons
- Bind character information to each button
- Spawn character on button click
Use Character Selection Library functions in Blueprint.
Character Name: "Warrior"
Character Description: "High health, slow movement, high damage"
Character Icon: [Select Texture2D]
Max Health: 200.0 (High for Warrior)
Armor: 0.1 (10% damage reduction)
Recovery: 1.0 (1 HP/s regen)
Move Speed: 500.0 (Slow for Warrior)
Might Multiplier: 1.3 (30% bonus damage)
Area Multiplier: 1.0 (normal area)
Speed Multiplier: 0.8 (20% slower projectiles)
Duration Multiplier: 1.0 (normal duration)
Cooldown Reduction: 0.0 (no cooldown reduction)
Amount Bonus: 0 (no extra projectiles)
Growth Multiplier: 1.0 (normal XP gain)
Greed Multiplier: 1.0 (normal Gold gain)
Magnet Radius: 100.0 (normal pickup range)
Luck Bonus: 0.0 (no luck bonus)
Health: 200
Armor: 10%
Speed: 500
Might: 130%
Health: 80
Armor: 0%
Speed: 650
Might: 150%
Area: 120%
Health: 120
Armor: 5%
Speed: 750
Might: 110%
Cooldown: 20%
- Character Selection Panel (Canvas Panel)
- Character Buttons (Button for each character)
- Character Info Display (Selected character information)
- Confirm Button (Confirm character and start game)
CharacterData: URFPlayerStatsDataAsset (Instance Editable: true)
- Character Icon (Image)
- Character Name (Text Block)
- Character Description (Text Block)
- Stats Display (Text Block)
Function: Update Character Button
Input: Character Data (URFPlayerStatsDataAsset)
↓
Get Character Name (Character Data)
↓
Set Text (Name Text Block)
↓
Get Character Icon (Character Data)
↓
Set Brush (Icon Image)
↓
Get Character Description (Character Data)
↓
Set Text (Description Text Block)
↓
Get Character Combat Stats (Character Data)
↓
Set Text (Stats Text Block)
Event: On Button Clicked
On Clicked (Character Button)
↓
Broadcast Event (Character Selected)
└─ Character Data: CharacterData
SelectedCharacter: URFPlayerStatsDataAsset
CharacterButtons: Array of WBP_CharacterButton
Event: Construct
Event Construct
↓
ForEachLoop (Character Buttons)
↓
Bind Event to On Character Selected
↓
Update Character Button (Character Data)
Event: On Character Selected
[Custom Event: Handle Character Selected]
Input: Character Data
↓
Set Selected Character (Character Data)
↓
Update Info Display
↓
Enable Confirm Button
Event: On Confirm Button Clicked
On Clicked (Confirm Button)
↓
Branch: Selected Character Valid?
├─ True:
│ ↓
│ Spawn Player with Character Data
│ ↓
│ Open Level (Game Level)
└─ False:
↓
Show Error ("Please select a character")
Returns the character name.
Get Character Name
└─ Character Data: DA_Character_Warrior
↓
Returns: "Warrior"
Returns the character description.
Get Character Description
└─ Character Data: DA_Character_Warrior
↓
Returns: "High health, slow movement, high damage"
Returns the character icon.
Get Character Icon
└─ Character Data: DA_Character_Warrior
↓
Returns: UTexture2D* (Icon)
Get Character Max Health (DA_Character_Warrior)
↓
Returns: 200.0
Get Character Move Speed (DA_Character_Warrior)
↓
Returns: 500.0
Get Character Might (DA_Character_Warrior)
↓
Returns: 1.3 (130% damage)
Other Individual Stat Functions:
- Get Character Armor
- Get Character Recovery
- Get Character Area
- Get Character Speed
- Get Character Duration
- Get Character Cooldown
- Get Character Amount
- Get Character Growth
- Get Character Greed
- Get Character Magnet
- Get Character Luck
Returns all stats as formatted text.
Get Character Stats Formatted (DA_Character_Warrior)
↓
Returns:
"=== COMBAT ===
Health: 200
Armor: 10%
Recovery: 1.0 HP/s
Speed: 500
=== WEAPON ===
Might: 130%
Area: 100%
Speed: 80%
Duration: 100%
Cooldown: 0%
=== PROGRESSION ===
Growth: 100%
Greed: 100%
Magnet: 100
Luck: 0"
Returns only combat stats.
Get Character Combat Stats (DA_Character_Warrior)
↓
Returns:
"Health: 200
Armor: 10%
Recovery: 1.0 HP/s
Speed: 500"
Returns only weapon stats.
Get Character Weapon Stats (DA_Character_Warrior)
↓
Returns:
"Might: 130%
Area: 100%
Speed: 80%
Duration: 100%
Cooldown: 0%"
Returns only progression stats.
Get Character Progression Stats (DA_Character_Warrior)
↓
Returns:
"Growth: 100%
Greed: 100%
Magnet: 100
Luck: 0"
Goal: Choose from 3 characters, start game.
Steps:
- Create Character Selection widget
- Add 3 buttons (Warrior, Mage, Rogue)
- Assign Character Data Asset to each button
- Button click → Select character → Start game
Blueprint:
// Button 1 (Warrior)
On Clicked
↓
Set Selected Character (DA_Character_Warrior)
↓
Update Info Display
// Confirm Button
On Clicked
↓
Spawn Player with Selected Character
↓
Open Level (Game Level)
Goal: Show all stats when character is selected.
Blueprint:
On Character Selected
↓
Get Character Name (Selected Character)
↓
Set Text (Name Text)
↓
Get Character Stats Formatted (Selected Character)
↓
Set Text (Stats Text)
↓
Get Character Icon (Selected Character)
↓
Set Brush (Icon Image)
Goal: Compare two characters side by side.
Blueprint:
// Character 1 Stats
Get Character Combat Stats (DA_Character_Warrior)
↓
Set Text (Character 1 Stats)
// Character 2 Stats
Get Character Combat Stats (DA_Character_Mage)
↓
Set Text (Character 2 Stats)
// Comparison
Branch: Warrior Health > Mage Health?
├─ True: Highlight Warrior Health (Green)
└─ False: Highlight Mage Health (Green)
Goal: Automatically create character buttons from Data Asset array.
Blueprint:
Variables:
- CharacterDataArray: Array of URFPlayerStatsDataAsset
Event Construct
↓
ForEachLoop (CharacterDataArray)
↓
Create Widget (WBP_CharacterButton)
↓
Get Character Name (Character Data)
↓
Set Button Text
↓
Get Character Icon (Character Data)
↓
Set Button Icon
↓
Add to Vertical Box
Goal: Some characters are locked initially.
Blueprint:
Function: Is Character Unlocked
Input: Character Data
↓
Get Character Name
↓
Check Save Game (Unlocked Characters)
↓
Branch: Is Unlocked?
├─ True: Enable Button
└─ False: Disable Button, Show Lock Icon
Problem: Get Character Name returns empty.
Solutions:
-
Is Character Data Asset null?
- Is Character Data variable set in widget?
- Is Data Asset assigned to button?
-
Does Data Asset have information?
- Is Character Name filled?
- Is Character Icon assigned?
Problem: Stat values differ from expected.
Solutions:
-
Check Data Asset:
- Are Base Stats entered correctly?
- Are multipliers 1.0-based? (1.3 = 130%)
-
Check formatted text:
- If using Get Character Stats Formatted, is format correct?
- Is percentage conversion happening? (x100)
Problem: Character selected but player doesn't spawn.
Solutions:
-
Is Selected Character null?
- Is character selection done correctly?
- Is Selected Character variable set?
-
Player spawn logic:
- Is Spawn Player function correct?
- Is Character Data Asset assigned to player?
Example Spawn Logic:
Spawn Actor from Class (BP_Player)
↓
Get Player Stats Component
↓
Set Player Stats Data Asset (Selected Character)
↓
Possess Player
Create your own stat format:
Function: Get Custom Stats Format
Input: Character Data
↓
Get Character Max Health
↓
Get Character Might
↓
Format Text ("HP: {0} | DMG: {1}%")
├─ {0}: Health
└─ {1}: Might * 100
↓
Return: Formatted Text
Organize characters into tiers (S, A, B, C):
Function: Get Character Tier
Input: Character Data
↓
Get Character Stats
↓
Calculate Total Power (Health + Might + Speed)
↓
Branch: Total Power > 1000?
├─ True: Return "S Tier"
├─ > 800: Return "A Tier"
├─ > 600: Return "B Tier"
└─ Else: Return "C Tier"
Recommend character based on play style:
Function: Recommend Character
Input: Play Style (Aggressive, Defensive, Balanced)
↓
Branch: Play Style
├─ Aggressive: Return DA_Character_Mage
├─ Defensive: Return DA_Character_Warrior
└─ Balanced: Return DA_Character_Rogue
If you encounter issues:
- Ensure Character Data Asset is filled
- Check that Character Data variable is set in widget
- Check Output Log (warning messages)
- Discord: https://discord.gg/QJxvpuyUv8
- GitHub: https://github.com/CanTATARDev/UltimateRoguelikeFramework
Note: This system is optimized for Vampire Survivors-style roguelike games. Customization may be needed for different game types.