16 KiB
Project Setup & Migration Guide — UE5 Modular Game Framework
Version: 1.0 | Target UE: 5.5–5.7
This guide covers everything you need to configure when migrating the framework into a new or existing UE5 project. Follow these steps in order.
1. Prerequisites
1.1 Required UE5 Plugins
Enable these in Edit → Plugins:
| Plugin | Category | Required For |
|---|---|---|
Enhanced Input |
Input | SS_EnhancedInputManager, all input handling |
GameplayTags |
Gameplay | All tag-driven state management (enabled by default) |
Motion Warping |
Animation | BPC_ContextualTraversalSystem vault/mantle |
Gameplay Abilities |
Gameplay | (optional — only if using GAS for combat layer) |
1.2 Framework Files to Copy
Copy these folders into your project's Content/ directory:
YourProject/Content/
├── Framework/
│ ├── Core/ ← Foundation (GI_GameFramework, DA_GameTagRegistry, FL_GameUtilities, etc.)
│ ├── Player/ ← Health, Stamina, Stress, Movement, Hiding, Camera, Body
│ ├── Interaction/ ← Doors, Puzzles, Traversal, Physics, UsableObjects, Displays
│ ├── Inventory/ ← InventorySystem, Containers, Pickups, Equipment, Keys, etc.
│ ├── Weapons/ ← WeaponBase, Firearm, Melee, Ammo, Reload, Recoil, Shield
│ ├── UI/ ← HUD, Menus, Inventory UI, Notifications, Settings
│ ├── Narrative/ ← NarrativeState, Dialogue, Objectives, Choices, Cutscenes
│ ├── AI/ ← EnemyBase, Controller, Perception, Alert, StateMachine
│ ├── Adaptive/ ← Atmosphere, Difficulty, Scares, Pacing, Audio
│ ├── Save/ ← SaveManager, Checkpoints, Death, Respawn, Corpses
│ ├── Meta/ ← Achievements, Progress Stats
│ ├── Settings/ ← Settings, Accessibility
│ ├── Polish/ ← Tutorial, Loading, Credits, Debug
│ ├── DataAssets/ ← All DA_* Data Assets
│ ├── Input/ ← IA_* Input Actions, IMC_* Input Mapping Contexts
│ ├── DataTables/ ← All DT_Tags_* Data Tables
│ ├── State/ ← BPC_StateManager, DA_StateGatingTable, Enums, Structs
│ └── Audio/ ← MS_* MetaSound buses, SS_AudioManager, RoomZones
2. Project Settings Configuration
2.1 Maps & Modes
Edit → Project Settings → Maps & Modes
| Setting | Value | Notes |
|---|---|---|
| Default GameMode | GM_CoreGameMode |
Or your project's subclass |
| Default Game Instance | GI_GameFramework |
Critical — owns all SS_ subsystems |
| Default Pawn Class | Your GASP-based player character | With all BPC_ components attached |
| Default Player Controller | PC_CoreController |
Handles input routing |
| Game Default Map | Your main menu / startup level | |
| Editor Startup Map | Your testing/development level |
2.2 Gameplay Tags — Register All Data Tables
Edit → Project Settings → Gameplay Tags
Under Gameplay Tag Table List, click + 11 times and assign:
| Index | Data Table | Tag Count |
|---|---|---|
| 0 | DT_Tags_Player |
34 |
| 1 | DT_Tags_Interaction |
36 |
| 2 | DT_Tags_Item |
26 |
| 3 | DT_Tags_Narrative |
48 |
| 4 | DT_Tags_AI |
23 |
| 5 | DT_Tags_Save |
22 |
| 6 | DT_Tags_Environment |
30 |
| 7 | DT_Tags_Combat |
26 |
| 8 | DT_Tags_State |
39 |
| 9 | DT_Tags_Audio |
30 |
| 10 | DT_Tags_Achievement |
20 |
⚠️ Critical: Without this step, NO framework GameplayTags will be recognized.
Is Gameplay Tag Validwill return false for all tags.DA_GameTagRegistry.ValidateTag()will fail.
Alternative — .ini approach: If you prefer DefaultGameplayTags.ini, add entries manually:
+GameplayTagList=(Tag="Framework.Player.State.Alive",DevComment="Player is alive and active")
+GameplayTagList=(Tag="Framework.Player.State.Dead",DevComment="Player health reached zero")
; ... (all 334 tags)
The Data Table approach is recommended because the CSV files are maintained alongside the framework docs.
2.3 Asset Manager — Data Asset Registration
Edit → Project Settings → Asset Manager
Under Primary Asset Types to Scan, add entries for framework Data Asset types:
| Primary Asset Type | Base Class | Has Blueprint Classes | Directory |
|---|---|---|---|
Item |
PrimaryDataAsset |
✓ | /Game/Framework/DataAssets/Items |
Equipment |
PrimaryDataAsset |
✓ | /Game/Framework/DataAssets/Equipment |
Weapon |
PrimaryDataAsset |
✓ | /Game/Framework/DataAssets/Weapons |
AIProfile |
PrimaryDataAsset |
✓ | /Game/Framework/DataAssets/AI |
Narrative |
PrimaryDataAsset |
✓ | /Game/Framework/DataAssets/Narrative |
Encounter |
PrimaryDataAsset |
✓ | /Game/Framework/DataAssets/Encounters |
Objective |
PrimaryDataAsset |
✓ | /Game/Framework/DataAssets/Objectives |
Puzzle |
PrimaryDataAsset |
✓ | /Game/Framework/DataAssets/Puzzles |
Atmosphere |
PrimaryDataAsset |
✓ | /Game/Framework/DataAssets/Atmosphere |
Scare |
PrimaryDataAsset |
✓ | /Game/Framework/DataAssets/Scares |
Audio |
PrimaryDataAsset |
✓ | /Game/Framework/DataAssets/Audio |
Input |
PrimaryDataAsset |
✓ | /Game/Framework/DataAssets/Input |
⚠️ Why: This enables
Async Load Primary Assetfor Data Assets. Without it, async loading and theDA_GameTagRegistrylookups via Asset Manager will fail.
2.4 Collision Presets
Edit → Project Settings → Collision
Create these custom Object Channels and Presets:
| Name | Type | Response |
|---|---|---|
Interaction |
Object Channel | Used by BPC_InteractionDetector traces |
HideSpot |
Object Channel | Used by I_HidingSpot overlap detection |
WeaponTrace |
Trace Channel | Used by BPC_FirearmSystem hitscan |
MeleeHitbox |
Object Channel | Used by BPC_MeleeSystem swing detection |
Interaction Preset:
- Block: WorldStatic, WorldDynamic
- Ignore: Pawn, Camera
- Overlap: Interaction objects
3. Enhanced Input Setup
3.1 Input Actions Required (Create in Content/Framework/Input/Actions/)
| Input Action | Type | Used By |
|---|---|---|
IA_Move |
Axis2D | Movement |
IA_Look |
Axis2D | Camera |
IA_Jump |
Digital | Jump / Traversal |
IA_Sprint |
Digital | Stamina drain |
IA_Crouch |
Digital | Posture toggle |
IA_Interact |
Digital | InteractionDetector |
IA_Fire |
Digital | WeaponBase |
IA_Aim |
Digital | ADS aim |
IA_Reload |
Digital | ReloadSystem |
IA_Melee |
Digital | MeleeSystem |
IA_Block |
Digital | Shield / Block |
IA_UseItem |
Digital | ActiveItemSystem / Consumable |
IA_Hotkey1 through IA_Hotkey8 |
Digital | Quick slot selection |
IA_NextItem |
Digital | Cycle quick slot forward |
IA_PreviousItem |
Digital | Cycle quick slot backward |
IA_Pause |
Digital | Pause menu |
IA_Inventory |
Digital | Inventory toggle |
IA_Journal |
Digital | Journal toggle |
IA_Map |
Digital | Map toggle |
IA_SkipCutscene |
Digital | CutsceneBridge skip |
IA_SkipDialogue |
Digital | DialoguePlayback skip |
IA_Grab |
Digital | PhysicsDragSystem |
3.2 Input Mapping Contexts (Create in Content/Framework/Input/Contexts/)
| Mapping Context | Priority | Contains |
|---|---|---|
IMC_Default |
0 | Move, Look, Jump, Sprint, Crouch, Interact, Fire, Aim, Reload, Melee, Block, UseItem, Hotkey1-8, NextItem, PreviousItem, Pause, Inventory, Journal, Map, Grab |
IMC_Hiding |
5 | PeekLeft, PeekRight, ExitHide, HoldBreath |
IMC_WristwatchUI |
10 | Menu navigation (d-pad), Confirm, Back |
IMC_Inspection |
20 | RotateItem, ZoomItem, ExitInspect |
IMC_UI |
100 | Menu navigation, Confirm, Back (consumes input) |
3.3 Platform Input Profiles
Create DA_InputMappingProfile Data Assets per platform:
DA_InputProfile_PC— Keyboard + Mouse bindingsDA_InputProfile_Xbox— Xbox controller bindingsDA_InputProfile_PS5— DualSense bindings
Each profile maps Input Actions to keys/buttons. Reference: SS_EnhancedInputManager reads these at init.
4. Gameplay Tag Configuration
4.1 Verify Tag Registration
After adding all 11 Data Tables to Project Settings:
- Open
DA_GameTagRegistry→ callGetAllRegisteredTags()→ output should show ~334 tags - Call
ValidateTag(Framework.Player.State.Alive)→ should returntrue - Call
ValidateTag(NonExistent.Tag)→ should returnfalse
4.2 Project-Specific Tags
Add project narrative/achievement tags to the existing CSVs (e.g., DT_Tags_Narrative.csv) or create a new DT_Tags_Project.csv. The Game. prefix namespace is reserved for project-specific tags. Example:
Name,Tag,DevComment
Game_Narrative_MyBossFight,Game.Narrative.Flag.BossDefeated,Boss fight completed
Game_Narrative_MySecretEnding,Game.Narrative.Ending.Secret,Secret ending flag
4.3 Tag-Driven State Gates
BPC_StateManager reads DA_StateGatingTable which maps action tags to blocking state tags. Ensure all state tags in the gating table exist in DT_Tags_State.csv.
5. Data Asset Population
5.1 Minimum Required Data Assets
Create these before running the game:
| Data Asset | Type | Required For |
|---|---|---|
DA_GameTagRegistry |
Base | Tag validation (loaded by GI_GameFramework.Init) |
DA_StateGatingTable |
State | BPC_StateManager action permission checks |
DA_AudioSettings |
Audio | SS_AudioManager bus volumes and defaults |
DA_InputMappingProfile |
Input | SS_EnhancedInputManager key bindings |
DA_AISettings (or per-enemy) |
AI | AI_BaseAgentController perception config |
5.2 Content Data Assets (Populate as you build content)
| Data Asset | One Per |
|---|---|
DA_ItemData |
Each item in the game |
DA_EquipmentConfig |
Each weapon / equipment piece |
DA_ObjectiveData |
Each quest / objective |
DA_DialogueSequence |
Each conversation |
DA_PuzzleData |
Each puzzle device |
DA_EncounterData |
Each enemy encounter group |
DA_AtmosphereProfile |
Each room / zone |
DA_ScareEvent |
Each scare event |
DA_RoomAcousticPreset |
Each acoustic zone |
DA_EndingCondition |
Each ending path |
6. Player Character Setup
Your player character Blueprint must have these components attached:
| Component | Location | Notes |
|---|---|---|
BPC_HealthSystem |
Character | Must be first-tier for damage cascade |
BPC_StaminaSystem |
Character | |
BPC_StressSystem |
Character | |
BPC_MovementStateSystem |
Character | Bridges to CMC + ABP_GASP |
BPC_HidingSystem |
Character | |
BPC_InteractionDetector |
Character | |
BPC_InventorySystem |
Character | Central authority |
BPC_ActiveItemSystem |
Character | Quick slots |
BPC_EquipmentSlotSystem |
Character | Equipped items |
BPC_ConsumableSystem |
Character | |
BPC_KeyItemSystem |
Character | |
BPC_DocumentArchiveSystem |
Character | |
BPC_JournalSystem |
Character | |
BPC_CameraStateLayer |
Character | Camera FOV / shake |
BPC_EmbodimentSystem |
Character | First-person body |
BPC_PlayerMetricsTracker |
Character | Analytics |
BPC_DeathHandlingSystem |
PlayerController | Death orchestrator |
BPC_StateManager |
PlayerController | State authority |
BPC_ContextualTraversalSystem |
Character | Motion warping vaults |
BPC_PhysicsDragSystem |
Character | Grab/drag |
GASP Integration: Add your GASP Animation Blueprint to the character's Mesh. BPC_MovementStateSystem sets GASP variables directly.
7. Level Setup
7.1 Minimum Level Requirements
Every playable level needs:
- GameMode override:
GM_CoreGameMode(or per-level subclass) - Player Start: Standard
PlayerStartactor - Lighting: At minimum a DirectionalLight + Skylight
7.2 World-Placed Framework Actors
Place these as needed:
| Actor | Purpose |
|---|---|
BP_DoorActor |
Interactive doors (set LinkedActors, DoorConfig per instance) |
BP_ItemPickup |
World items (set ItemData Data Asset per instance) |
BP_ContainerInventory |
Lootable containers |
BP_PuzzleDeviceActor |
Puzzles (set PuzzleData per instance) |
BP_NarrativeTriggerVolume |
Story triggers (set TriggerActions per instance) |
BP_Checkpoint |
Respawn points |
BP_RoomAudioZone |
Acoustic zones |
BP_EnemyBase |
AI enemies (set AIProfile per instance) |
BP_PatrolPath |
Enemy patrol routes |
8. Initialization Sequence (First Boot)
The framework boot order on a fresh project launch:
1. Engine creates UGameInstance → GI_GameFramework
2. GI_GameFramework.Init()
├─ InitPlatformServices()
├─ UE auto-creates all SS_ GameInstanceSubsystems:
│ ├─ SS_SaveManager.Initialize()
│ ├─ SS_AudioManager.Initialize() → loads DA_AudioSettings
│ ├─ SS_EnhancedInputManager.Initialize() → loads DA_InputMappingProfile
│ ├─ SS_UIManager.Initialize()
│ └─ SS_AchievementSystem.Initialize()
├─ SS_SettingsSystem loads persistent settings
└─ SetGamePhase(MainMenu)
3. GM_CoreGameMode loads (on level start)
├─ Spawns GS_CoreGameState (replicated state bus)
├─ Spawns PlayerController → auto-possesses Player Pawn
└─ All BPC_ components BeginPlay → bind dispatchers
4. PlayerController.BeginPlay()
├─ BPC_StateManager.BeginPlay() → load DA_StateGatingTable
├─ SS_EnhancedInputManager.PushContext(IMC_Default, Priority=0)
└─ GI_GameFramework.SetGamePhase(InGame)
5. If loading a save:
├─ SS_SaveManager.LoadFromSlot(SlotIndex)
├─ Deserializes all I_Persistable actors
└─ Restores player position, inventory, narrative flags
9. Common Migration Pitfalls
9.1 "No Gameplay Tags Registered" Warning
Cause: Data Tables not added to Project Settings → Gameplay Tags → Gameplay Tag Table List.
Fix: Add all 11 DT_Tags_* tables. Restart editor to refresh tag table.
9.2 "GetAllRegisteredTags Returns Empty Array"
Cause: DA_GameTagRegistry.TagDataTables array is empty (the variable defaults need populating in the Data Asset).
Fix: Open DA_GameTagRegistry → set TagDataTables array → add all 11 Data Table references.
9.3 "SS_Subsystem Not Found" / Null Subsystem
Cause: GI_GameFramework not set as Default Game Instance in Project Settings.
Fix: Project Settings → Maps & Modes → Default Game Instance → GI_GameFramework.
9.4 Enhanced Input Not Working
Cause: Enhanced Input plugin not enabled, or Input Mapping Contexts not pushed.
Fix: Enable plugin → verify SS_EnhancedInputManager.PushContext() is called in PlayerController.BeginPlay.
9.5 Motion Warping Traversals Not Aligning
Cause: Motion Warping plugin not enabled.
Fix: Edit → Plugins → Motion Warping → Enable → Restart Editor.
9.6 AI Behavior Trees Not Running
Cause: AI_BaseAgentController not assigned to enemy pawn, or Blackboard not configured.
Fix: Set AI Controller Class on BP_EnemyBase to AI_BaseAgentController. Ensure BB_AgentBoard is assigned.
10. Testing the Migration
10.1 Smoke Test Checklist
- Editor opens without asset-loading errors
- PIE (Play In Editor): no
GetSubsystem()null pointer errors - GameplayTag validation:
DA_GameTagRegistry.ValidateTag(Framework.Player.State.Alive)returns true - Player can move (IMC_Default pushed, input routed)
- Health/Stamina/Stress bars appear on HUD
- Interaction: approach a door, see prompt, press E → door opens
- Inventory: pick up an item → appears in inventory UI
- Combat: fire weapon → damage applies → enemy reacts
- Save/Load: save game → quit → load → state restored
- Death: die → respawn at checkpoint
- State Gating: sprint → reload while sprinting → sprint blocked
11. Updating This Document
When adding new framework systems that require Project Settings changes:
- Add the setting to the appropriate section above
- Update the Prerequisites or Data Asset lists
- Add a Common Pitfall if the setting is easy to forget
- Increment the version at the top
Project Setup & Migration Guide v1.0 — Required reading before importing the framework into any UE5 project.