71 — SS_SettingsManager
Blueprint Spec — UE 5.5–5.7
Parent Class
GameInstanceSubsystem
Dependencies
Purpose
Centralized settings manager that stores, applies, and persists all player-configurable game settings including graphics, audio, gameplay, controls, accessibility, and language. Operates as a GameInstanceSubsystem so settings are available before any level loads and persist across level transitions. Provides a unified API for reading and writing settings, with change-notification dispatchers for real-time UI updates.
Enums
ESettingsCategory
| Value |
Description |
| Graphics |
Visual quality settings |
| Audio |
Volume and audio settings |
| Gameplay |
Game behavior settings |
| Controls |
Input bindings |
| Accessibility |
Accessibility options |
| Language |
Localization |
ESettingsType
| Value |
Description |
| Bool |
Yes/no toggle |
| FloatRange |
Slider value (0.0–1.0) |
| IntRange |
Integer slider |
| Dropdown |
Enum or option list |
| KeyBinding |
Rebiddable input |
| Color |
Color picker |
Structs
FSettingsEntry
| Field |
Type |
Description |
| Category |
ESettingsCategory |
Grouping |
| Key |
FName |
Setting identifier |
| DisplayName |
FText |
Localized label |
| Tooltip |
FText |
Help text |
| Type |
ESettingsType |
Data type |
| CurrentValue |
FString |
Current value as string |
| DefaultValue |
FString |
Default value |
| MinValue |
Float |
For ranges |
| MaxValue |
Float |
For ranges |
| Options |
TArray<FText> |
For dropdowns |
Variables
| Name |
Type |
Description |
SettingsMap |
TMap<FName, FSettingsEntry> |
All settings by key |
bSettingsLoaded |
Bool |
Initialization flag |
PendingApplySettings |
TArray<FName> |
Settings awaiting apply |
bAutoApply |
Bool |
Apply changes immediately |
Functions
| Name |
Inputs |
Outputs |
Description |
Initialize |
— |
— |
Load saved settings, set defaults |
RegisterSetting |
Entry: FSettingsEntry |
— |
Add setting to registry |
GetSetting |
Key: FName |
FSettingsEntry |
Retrieve setting |
SetSetting |
Key: FName, Value: FString |
— |
Update setting value |
SetSettingBool |
Key: FName, Value: Bool |
— |
Type-safe bool setter |
SetSettingFloat |
Key: FName, Value: Float |
— |
Type-safe float setter |
SetSettingInt |
Key: FName, Value: Int32 |
— |
Type-safe int setter |
SetSettingDropdown |
Key: FName, OptionIndex: Int32 |
— |
Dropdown index setter |
GetSettingBool |
Key: FName |
Bool |
Type-safe bool getter |
GetSettingFloat |
Key: FName |
Float |
Type-safe float getter |
GetSettingInt |
Key: FName |
Int32 |
Type-safe int getter |
GetSettingDropdown |
Key: FName |
Int32 |
Dropdown index getter |
ResetToDefault |
Key: FName |
— |
Revert single setting |
ResetCategoryToDefaults |
Category: ESettingsCategory |
— |
Revert all in category |
ResetAllToDefaults |
— |
— |
Factory reset settings |
ApplySettings |
— |
— |
Push pending changes to systems |
ApplyGraphicsSettings |
— |
— |
Push to PerformanceScaler |
ApplyAudioSettings |
— |
— |
Push to AudioManager |
ApplyGameplaySettings |
— |
— |
Push to gameplay systems |
ApplyControlSettings |
— |
— |
Update input mappings |
ApplyAccessibilitySettings |
— |
— |
Push to AccessibilityManager |
SaveSettings |
— |
— |
Persist to SS_SaveManager |
LoadSettings |
— |
— |
Read from SS_SaveManager |
IsSettingModified |
Key: FName |
Bool |
Compare to default |
GetAllSettingsInCategory |
Category: ESettingsCategory |
TArray<FSettingsEntry> |
Filter by category |
RegisterDefaultSettings |
— |
— |
Populate standard settings |
Blueprint Flow
[On GameInstance Init]
└─► RegisterDefaultSettings()
└─► LoadSettings() from SS_SaveManager
└─► ApplySettings() to all systems
└─► bSettingsLoaded = true
[SetSetting]
└─► Update SettingsMap[Key].CurrentValue = Value
└─► If Key modified:
Add to PendingApplySettings
└─► If bAutoApply:
ApplySettings()
└─► Broadcast OnSettingChanged(Key, Value)
[ApplySettings]
└─► ApplyGraphicsSettings():
Get "QualityPreset", "ResolutionScale", "UpscalerMethod", etc.
Pass to BPC_RenderPipelineManager.ApplyQualityPreset(QualityPreset)
→ RenderPipelineManager handles ALL CVars, reload detection, platform selection
└─► ApplyAudioSettings():
Get "MasterVolume", "SFXVolume", etc.
Pass to BPC_AudioManager volume modifiers
└─► ApplyGameplaySettings():
Get "InvertLook", "Sensitivity", "FOV"
Pass to BPC_Movement or BPC_Camera
└─► ApplyControlSettings():
Get rebindings, apply to UPlayerInput
└─► ApplyAccessibilitySettings():
Pass to BPC_AccessibilitySettings
└─► Clear PendingApplySettings
└─► OnSettingsApplied.Broadcast()
[SaveSettings]
└─► Serialize SettingsMap to JSON string
└─► Pass to SS_SaveManager.SaveString("Settings", JSON)
└─► OnSettingsSaved.Broadcast()
[LoadSettings]
└─► String = SS_SaveManager.LoadString("Settings")
└─► If String is empty: return (use defaults)
└─► Deserialize JSON string into SettingsMap
└─► For each loaded setting:
If key exists in map: update CurrentValue
└─► OnSettingsLoaded.Broadcast()
[RegisterDefaultSettings]
└─► Graphics category:
QualityPreset Dropdown [Low, Medium, High, Ultra, Cinematic, Custom]
GlobalIllumination Dropdown [Lumen, Baked, SSGI, Off] ⚠ reload
ShadowMethod Dropdown [VSM, CSM, DFShadows, Off] ⚠ reload
ReflectionMethod Dropdown [Lumen, SSR, Captures, Off] ⚠ reload
MeshStrategy Dropdown [Nanite, LOD, Proxy] ⚠ reload
UpscalerMethod Dropdown [TSR, DLSS, FSR, PSSR, XeSS, NIS, TAAU, Off]
UpscalerQuality Dropdown [UltraPerf, Perf, Balanced, Quality, UltraQuality]
ResolutionScale Float 1.0 [0.25–2.0]
DynamicResolution Bool false
DynamicResTargetFPS Int 60 [30–120]
ShadowQuality Int 2 [0–4]
TextureQuality Int 2 [0–3]
PostProcessQuality Int 2 [0–3]
ViewDistanceQuality Int 2 [0–3]
FoliageQuality Int 2 [0–3]
AntiAliasingQuality Int 2 [0–3]
VSync Bool true
FrameRateLimit Int 60 [30–240]
MotionBlur Bool true
DepthOfField Bool true
VolumetricClouds Bool true
HW_RayTracing Bool false ⚠ reload
Brightness Float 1.0 [0.5–2.0]
HDR Bool false (if display supports)
TexturePoolSizeMB Int 2048 [512–8192]
└─► Audio category:
MasterVolume Float 1.0 [0–1]
SFXVolume Float 1.0 [0–1]
MusicVolume Float 0.8 [0–1]
AmbientVolume Float 0.8 [0–1]
DialogueVolume Float 1.0 [0–1]
UIVolume Float 1.0 [0–1]
SpatialAudio Bool true
AudioQuality Int 2 [0–3]
└─► Gameplay category:
InvertLook Bool false
SensitivityX Float 0.5 [0–1]
SensitivityY Float 0.5 [0–1]
FOV Int 90 [70–120]
HeadBob Bool true
AutoPickup Bool true
CrosshairType Dropdown [Default, Dot, Cross, Off]
Subtitles Bool true
└─► Controls category:
(Key bindings stored separately via UPlayerInput)
└─► Accessibility category:
SubtitleSize Int 1 [0–3]
HighContrastUI Bool false
ColorBlindMode Dropdown [None, Protanopia, Deuteranopia, Tritanopia]
TextToSpeech Bool false
ScreenShakeIntensity Float 1.0 [0–1]
CameraShake Bool true
ReducedMotions Bool false
LargeText Bool false
└─► Language category:
Language Dropdown [en, fr, de, es, it, pt, ja, ko, zh]
Event Dispatchers
| Name |
Payload |
Description |
OnSettingChanged |
Key: FName, NewValue: FString |
Single setting modified |
OnSettingsApplied |
— |
All settings pushed to systems |
OnSettingsSaved |
— |
Settings persisted |
OnSettingsLoaded |
— |
Settings read from save |
OnCategoryReset |
Category: ESettingsCategory |
Category reverted |
Communications With
Reuse Notes
- Settings are stored as FString for maximum flexibility (serialize/deserialize as needed)
- Type-safe getters/setters handle conversion from FString
- Auto-apply can be toggled for batch changes vs immediate
- Default settings registered on initialization serve as fallback
- All settings are available before any level loads (GameInstanceSubsystem)
- Language settings trigger UI refresh via OnSettingChanged