Generic Game System 1.6
Changes since 1.5.1. Local-player settings can now be previewed, applied, or cancelled. A few sloppy defaults in interaction, activatable widgets, and modals are tightened. The settings menu is additive and will not appear until you configure it. Missing an interaction component, a modal close-zone bind, or an old display-name override fails activation or compilation.
Added
- Each local player can preview, save, or discard settings. Device video writes to
UGameUserSettings. Audio, input, and accessibility write to that player’s Shared SaveGame. Leaving the menu without Apply drops dirty values. - Common video / audio / input / accessibility / language do not have to be built from scratch. Built-in providers can be subclassed in Blueprint. Video covers window mode, display selection, resolution, brightness, quality, VSync, frame rate, and dynamic resolution. Input covers device preferences only, not Enhanced Input rebinding. Projects must override Shared
ApplySettingsbefore those preferences reach their own audio or post-process. - A settings screen can list rows, show details, and go back through CommonUI. An activatable menu, entries, and Apply / Cancel are included.
- A narrow HUD can stack a row of widgets into one column. The Lyra-style responsive panel folds children when the viewport is small.
- Effect libraries, interaction definitions, and settings assets can be created in the Content Browser.
GenericGameSystemEditorfactories are new. - Mac is allowed on every runtime module and the editor module. This release targets Unreal Engine 5.8.
Changed
- An Avatar without an interaction component can no longer activate an interaction ability. Activation is refused and logged, so the ability does not run with no candidates.
- Interaction Gameplay Behaviors instantiate per run. Single-run ability state is no longer stored on a shared CDO. Custom behaviors that cached on the CDO will leak across triggers.
- The default interaction display-name implementation uses the correct function name. C++ subclasses that overrode
GetInteractionDisplayNameText_Implementationmust rename it or they fail to compile / keep the wrong default. - Failed Smart Object lookups no longer hand Blueprints a dirty pointer. Outputs are cleared on the failure path.
InputConfig = Defaultinherits the CommonUI parent config instead of declaring nothing. Old screens that relied on an empty Optional should pick Game / Menu / GameAndMenu. A flag can hide the cursor during viewport capture.- Modals can close from an empty tap. Subclasses must bind
Border_TapToCloseZone, or turn the option off. Existing Blueprints without that bind need it after the upgrade. - Effects and UI developer settings follow the other Generic plugins.
UGES_ContextEffectsSettingsis nowUGES_DeveloperSettings;UGUIS_GenericUISystemSettingsis nowUGUIS_DeveloperSettings. Field responsibilities are unchanged.
Upgrade Notes
Settings are additive and stay dark until configured. Interaction, modals, and old settings class names are behavior tightening or source-breaking. C++ class names, modal Blueprints, the interaction component, and interface overrides need a pass. Skipping it can leave interaction abilities inert or modal Blueprints unable to compile.
- Change hardcoded old Developer Settings class names in C++ or ini, then confirm the original values still appear in Project Settings.
- Bind
Border_TapToCloseZoneonUGUIS_GameModalWidgetsubclasses, or disable tap-to-close. - Add an interaction component on the Avatar. Interaction abilities no longer activate without it.
- Rewrite custom interaction behaviors that relied on shared CDO state. Treat each run as a new instance.
- Rename
GetInteractionDisplayNameText_ImplementationtoGetInteractionDisplayName_Implementation. - Widgets with
InputConfig = Defaultinherit the parent input config. If the old behavior depended on “no input config declared”, pick Game / Menu / GameAndMenu explicitly. - To use the settings menu: configure
UGSS_DeveloperSettings, usually subclass Common Shared and overrideApplySettings, then add the Common providers you need to Startup Provider Classes.