Files
UE5-Modular-Game-Framework/docs/developer/project-setup-migration.md

16 KiB
Raw Blame History

Project Setup & Migration Guide — UE5 Modular Game Framework

Version: 1.0 | Target UE: 5.55.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 Valid will 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 Asset for Data Assets. Without it, async loading and the DA_GameTagRegistry lookups 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 bindings
  • DA_InputProfile_Xbox — Xbox controller bindings
  • DA_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:

  1. Open DA_GameTagRegistry → call GetAllRegisteredTags() → output should show ~334 tags
  2. Call ValidateTag(Framework.Player.State.Alive) → should return true
  3. Call ValidateTag(NonExistent.Tag) → should return false

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 PlayerStart actor
  • 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:

  1. Add the setting to the appropriate section above
  2. Update the Prerequisites or Data Asset lists
  3. Add a Common Pitfall if the setting is easy to forget
  4. Increment the version at the top

Project Setup & Migration Guide v1.0 — Required reading before importing the framework into any UE5 project.