Setting Types
Setting Types are Blueprint classes that define how settings work. They determine what a setting controls, whether it binds to an external game system, and where it's saved.
What is a Setting Type?
A Setting Type is a Blueprint class (inheriting from SettingType) that configures:
- Domain: Global or Player
- Binding Strategy: Optional binding to an external game system (console variables, input bindings, etc.)
- Persistence Strategy: Where the setting is saved (config files, save games, etc.)
- Key Fragment: Optional identifier fragments
- Controlled Setting Keys: Optional settings controlled by this setting
Creating a Setting Type
- In the Content Browser, right-click and select Blueprint Class.
- Choose Setting Type as the parent class.
- Name it based on behavior (for example,
Setting_Globalfor console variables). - Open and configure:
- Select Domain (Global or Player).
- Add a Binding Strategy from the dropdown if the setting needs automatic synchronization to a game system.
- Add a Persistence Strategy from the dropdown.
Reusing Setting Types
You typically create one Setting Type per behavior pattern, not one per setting.
Multiple settings per type
A single Setting Type can be used for many settings. Widgets specify which specific setting they control using the Sub Key property:
Example: A single Setting_Global can be used for all console variable settings:
- Shadow quality widget → Setting Type:
Setting_Global, Sub Key:sg.ShadowQuality - Texture quality widget → Setting Type:
Setting_Global, Sub Key:sg.TextureQuality - Audio volume widget → Setting Type:
Setting_Global, Sub Key:GameAudio.Volume
The Sub Key identifies which specific setting the widget controls:
- Console variable widgets - The console variable name (e.g.,
sg.ShadowQuality) - Input mapping widgets - The player-mappable binding name (from the widget's Mapping Name property)
Single setting per type
Create a dedicated Setting Type when a setting needs special logic or configuration. In this case, widgets don't need a Sub Key:
Example: The example project's Setting_Resolution needs custom logic (a value mask on its console-variable binding strategy to extract resolution from a larger value). The resolution widget references Setting_Resolution with no Sub Key.