Quick Start¶
Get a working skill progression system running in 10 minutes.
Overview¶
By the end of this guide you will have:
- A skill database with all 15 skills configured
- An XP curve defining level progression
- A player character with
UFWSkillProgressionComponentattached - XP being awarded and skill levels displayed at runtime
Step 1 -- Create the XP Curve¶
The XP curve defines how much total XP is required for each skill level.
- In the Content Browser, right-click and select Miscellaneous > Data Asset.
- Choose
FWSkillXPCurveas the class. - Name it
DA_DefaultXPCurve. - Open the asset and define XP thresholds per level.
The curve maps each level to the cumulative XP required to reach it. For example:
| Level | Total XP Required |
|---|---|
| 1 | 0 |
| 2 | 83 |
| 3 | 174 |
| 4 | 276 |
| 5 | 388 |
| 10 | 1,154 |
| 25 | 8,740 |
| 50 | 101,333 |
| 99 | 13,034,431 |
Curve Design
FWSkillSystem supports any XP curve shape. You can use linear, polynomial, or exponential scaling. The curve is defined as a data asset, so designers can iterate without recompiling.
Step 2 -- Create Skill Definitions¶
For each of the 15 skills, create a UFWSkillDefinition data asset:
- Right-click in the Content Browser and select Miscellaneous > Data Asset.
- Choose
FWSkillDefinitionas the class. - Name it following the convention
DA_Skill_<SkillName>(e.g.,DA_Skill_Mining). - Open the asset and configure:
- Skill Type -- Select the corresponding
EFWSkillTypevalue - Display Name -- Human-readable name (e.g., "Mining")
- XP Curve Override -- Leave empty to use the default curve, or assign a custom
UFWSkillXPCurve - Max Level -- Maximum achievable level for this skill (e.g., 99)
- Skill Type -- Select the corresponding
Repeat for all 15 skills: Warfare, Marksmanship, Magic, Bounty, Woodcutting, Mining, Fishing, Husbandry, Cooking, Woodworking, Crafting, Smithing, Alchemy, Construction, Artifice.
Step 3 -- Create the Skill Database¶
- Create another Data Asset, this time choosing
FWSkillDatabase. - Name it
DA_SkillDatabase. - Open it and add all 15
UFWSkillDefinitionassets you created in Step 2.
Step 4 -- Assign the Database in Project Settings¶
- Navigate to Edit > Project Settings > Plugins > FW Skill System.
- Set Skill Database to
DA_SkillDatabase. - Set Default XP Curve to
DA_DefaultXPCurve.
Step 5 -- Add the Component to Your Character¶
In Blueprints¶
- Open your player character or controller Blueprint.
- Click Add Component and search for
FWSkillProgression. - Select
FW Skill Progression Component. - The component automatically loads the skill database from project settings.
In C++¶
// In your character or controller header
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Skills")
TObjectPtr<UFWSkillProgressionComponent> SkillProgression;
// In your constructor
SkillProgression = CreateDefaultSubobject<UFWSkillProgressionComponent>(TEXT("SkillProgression"));
Step 6 -- Award XP¶
- Get a reference to the Skill Progression Component.
- Call Award Skill XP with the skill type and XP amount.
- For combat encounters, call Award Combat XP instead.
Step 7 -- Read Skill Levels¶
// Get the current Mining level
int32 MiningLevel = SkillProgression->GetSkillLevel(EFWSkillType::Mining);
// Get XP progress toward the next level (0.0 to 1.0)
float Progress = SkillProgression->GetSkillLevelProgress(EFWSkillType::Mining);
// Get XP remaining to next level
float Remaining = SkillProgression->GetXPToNextLevel(EFWSkillType::Mining);
// Get total level across all skills
int32 TotalLevel = SkillProgression->GetTotalLevel();
Use the pure Blueprint nodes Get Skill Level, Get Skill Level Progress, Get XP To Next Level, and Get Total Level on the Skill Progression Component.
Step 8 -- Listen for Events¶
Bind to events to react to XP gains and level-ups:
SkillProgression->OnSkillXPGained.AddDynamic(this, &AMyCharacter::HandleXPGained);
SkillProgression->OnSkillLevelUp.AddDynamic(this, &AMyCharacter::HandleLevelUp);
void AMyCharacter::HandleXPGained(EFWSkillType SkillType, float Amount, float NewTotalXP)
{
// Update XP bar UI for the given skill
}
void AMyCharacter::HandleLevelUp(EFWSkillType SkillType, int32 NewLevel)
{
// Show level-up notification, unlock new content
}
Result¶
You now have a character that:
- Tracks XP and levels across 15 skills
- Awards XP through direct skill calls or combat XP distribution
- Broadcasts events on XP gain and level-up
- Provides pure getter functions for UI display
Next Steps¶
- Read the full API Reference for all available functions and events.
- See Configuration for detailed XP curve, milestone, and project settings setup.
- Follow the Building a Skill Progression UI tutorial for a complete UMG integration walkthrough.
- Check Blueprints for a visual reference of all exposed Blueprint nodes.