Skip to content

Step 2: Character Selection

Can TATAR edited this page Jun 11, 2026 · 3 revisions

Character Selection System - Quickstart Guide

Table of Contents

  1. Overview
  2. Quick Start
  3. Creating Character Data Assets
  4. Creating Character Selection UI
  5. Function Reference
  6. Example Usage Scenarios
  7. Troubleshooting

Overview

The Character Selection System allows players to choose between different character classes. Each character has different stats (Health, Speed, Damage, etc.).

This system is not tied to AURFTestPlayer. For production projects, each selectable character can use your own ACharacter or APawn class, as long as that class includes the required URF player components.

Recommended production player components:

  • URFHealthComponent
  • URFExperienceComponent
  • URFWeaponComponent
  • URFPlayerStatsComponent
  • URFLevelUpSystem
  • URFVacuumComponent optional

Features

  • ✅ 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

System Components

  • URFPlayerStatsDataAsset: Character definitions (stats, identity)
  • URFCharacterSelectionLibrary: Easy UI functions (static)
  • URFPlayerStatsComponent: Stats management on player
  • Selected Pawn Class: The actual player Blueprint class to spawn. This can be your own ACharacter or APawn. This can be your own ACharacter or APawn. It does not need to inherit from AURFTestPlayer. If you use a custom production player, make sure it includes the required URF player components: URFHealthComponent, URFExperienceComponent, URFWeaponComponent, URFPlayerStatsComponent, and URFLevelUpSystem.

Quick Start

Step 1: Create Character Data Asset

  1. Right-click in Content Browser → Miscellaneous → Data Asset
  2. Select URFPlayerStatsDataAsset
  3. Name it (e.g., DA_Character_Warrior)
  4. Open the asset and configure settings

Step 2: Create Character Selection UI Widget

  1. Create User Interface → Widget Blueprint
  2. Add character buttons
  3. Bind character information to each button
  4. Spawn character on button click The spawned character can be any custom ACharacter or APawn. After spawning, make sure the PlayerController possesses it. URFGameDirector will then automatically use that possessed pawn as the player target.

Step 3: Display Character Information

Use Character Selection Library functions in Blueprint.


Creating Character Data Assets

Identity

Character Name: "Warrior"
Character Description: "High health, slow movement, high damage"
Character Icon: [Select Texture2D]

Base Stats

Combat Stats

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)

Weapon Stats

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)

Progression Stats

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)

Example Character Classes

Warrior (Tank)

Health: 200
Armor: 10%
Speed: 500
Might: 130%

Mage (Glass Cannon)

Health: 80
Armor: 0%
Speed: 650
Might: 150%
Area: 120%

Rogue (Speed)

Health: 120
Armor: 5%
Speed: 750
Might: 110%
Cooldown: 20%

Creating Character Selection UI

Widget Structure

Basic UI Elements

  1. Character Selection Panel (Canvas Panel)
  2. Character Buttons (Button for each character)
  3. Character Info Display (Selected character information)
  4. Confirm Button (Confirm character and start game)

Character Button Widget (WBP_CharacterButton)

Variables

CharacterData: URFPlayerStatsDataAsset (Instance Editable: true)

UI Elements

  • Character Icon (Image)
  • Character Name (Text Block)
  • Character Description (Text Block)
  • Stats Display (Text Block)

Event Graph

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

Main Character Selection Widget (WBP_CharacterSelection)

Variables

SelectedCharacter: URFPlayerStatsDataAsset
CharacterButtons: Array of WBP_CharacterButton

Event Graph

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")

Function Reference

Character Identity

Get Character Name

Returns the character name.

Get Character Name
  └─ Character Data: DA_Character_Warrior
  ↓
Returns: "Warrior"

Get Character Description

Returns the character description.

Get Character Description
  └─ Character Data: DA_Character_Warrior
  ↓
Returns: "High health, slow movement, high damage"

Get Character Icon

Returns the character icon.

Get Character Icon
  └─ Character Data: DA_Character_Warrior
  ↓
Returns: UTexture2D* (Icon)

Individual Stats

Get Character Max Health

Get Character Max Health (DA_Character_Warrior)
  ↓
Returns: 200.0

Get Character Move Speed

Get Character Move Speed (DA_Character_Warrior)
  ↓
Returns: 500.0

Get Character Might

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

Formatted Stats (Ready for UI)

Get Character Stats Formatted

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"

Get Character Combat Stats

Returns only combat stats.

Get Character Combat Stats (DA_Character_Warrior)
  ↓
Returns:
"Health: 200
Armor: 10%
Recovery: 1.0 HP/s
Speed: 500"

Get Character Weapon Stats

Returns only weapon stats.

Get Character Weapon Stats (DA_Character_Warrior)
  ↓
Returns:
"Might: 130%
Area: 100%
Speed: 80%
Duration: 100%
Cooldown: 0%"

Get Character Progression Stats

Returns only progression stats.

Get Character Progression Stats (DA_Character_Warrior)
  ↓
Returns:
"Growth: 100%
Greed: 100%
Magnet: 100
Luck: 0"

Example Usage Scenarios

Scenario 1: Simple Character Selection

Goal: Choose from 3 characters, start game.

Steps:

  1. Create Character Selection widget
  2. Add 3 buttons (Warrior, Mage, Rogue)
  3. Assign Character Data Asset to each button
  4. 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)

Scenario 2: Detailed Character Information

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)

Scenario 3: Character Comparison

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)

Scenario 4: Dynamic Character List

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

Scenario 5: Character Unlock System

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

Troubleshooting

Character Information Not Showing

Problem: Get Character Name returns empty.

Solutions:

  1. Is Character Data Asset null?

    • Is Character Data variable set in widget?
    • Is Data Asset assigned to button?
  2. Does Data Asset have information?

    • Is Character Name filled?
    • Is Character Icon assigned?

Stats Appear Incorrect

Problem: Stat values differ from expected.

Solutions:

  1. Check Data Asset:

    • Are Base Stats entered correctly?
    • Are multipliers 1.0-based? (1.3 = 130%)
  2. Check formatted text:

    • If using Get Character Stats Formatted, is format correct?
    • Is percentage conversion happening? (x100)

Player Not Spawning

Problem: Character selected but player doesn't spawn.

If using a custom production player, make sure the selected pawn class:

  • Inherits from ACharacter or APawn
  • Has URFPlayerStatsComponent
  • Has the required URF components for your game
  • Is assigned in the character selection flow
  • Is possessed by the player controller after spawn

Solutions:

  1. Is Selected Character null?

    • Is character selection done correctly?
    • Is Selected Character variable set?
  2. 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

Custom Player Not Working With URF Systems

If you use your own ACharacter or APawn, make sure:

  • The spawned character is possessed by the PlayerController
  • The character has the required URF player components
  • Damage is routed with Event AnyDamage -> URFHealthComponent.TakeSimpleDamage
  • Your GameMode or spawn logic is not still using the old demo player

Advanced Customizations

Custom Stat Display

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

Character Tier System

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"

Character Recommendations

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

Support

If you encounter issues:

  1. Ensure Character Data Asset is filled
  2. Check that Character Data variable is set in widget
  3. Check Output Log (warning messages)

Community

Note: This system is optimized for Vampire Survivors-style roguelike games. Customization may be needed for different game types.

Clone this wiki locally