Generic Input System 1.6
Changes since 1.5. StateTree can now own input permissions and buffer windows. Two sloppy defaults are gone: the component must live on a Pawn, and an empty setup no longer allows every input. This is a behavior-tightening upgrade. A component on a Controller, or a missing setup, means no input after the upgrade.
Added
- Combo, hit-react, and interaction windows can follow a StateTree state instead of manual push/pop in every ability.
GIPS|Inputnodes scope control setups and buffer windows to a state’s lifetime, and can listen or wait for those windows. - C++ and StateTree hear the same input events as Blueprint. The component adds native multicast delegates. Existing Blueprint delegates remain.
- Mac is allowed on the runtime module. Enabling this plugin also enables StateTree. This release targets Unreal Engine 5.8.
Changed
- The input component only accepts a Pawn owner. A PlayerController or AIController host is no longer a half-working option. StateTree can still resolve a Controller to its Pawn; the component itself must be on that Pawn. Bindings are not created if the owner is wrong.
- An empty setup no longer means “allow all”.
GetCurrentInputSetup()returning null now fails the check and logs a Warning. Projects that only used the component as an event bus still get broadcasts; processors do not run. - Bad Input Config fails in the editor; runtime nulls warn instead of
check-crashing. Invalid tags, missing Input Actions, and incomplete buffer-window definitions are rejected. - Processors with empty InputTags now match every input. Trigger Events still filter them. Processors that used an empty list to stay idle will start handling everything.
- Closing every buffer window notifies listeners once per window.
CloseActiveInputBufferWindowsused to clear the list silently. Animation or ability logic that assumed a quiet batch close can re-enter.
Fixed
- Exact-match on listen actually works.
ListenInputEvent’sbExactMatchexisted in the 1.5 header but was never assigned. The default is still exact match. - Canceling an async listen unbinds the right delegate. Non-buffered listeners no longer unsubscribe from the buffered-input event, and always call
Super::Cancel().
Removed
EGIPS_OwnerTypeis gone. The unfinished Controller-owner path was deleted instead of extended. External C++ that names the enum will not compile.
Upgrade Notes
Behavior tightening. Component placement, Input Config assets, processor tags, and window-close listeners need a pass. The usual failure if you skip it is a character with no input, or a processor that suddenly handles every action.
- Move
UGIPS_InputSystemComponentfrom the Controller onto the possessed Pawn. - Always give the component a valid
UGIPS_InputControlSetup. Do not rely on “no setup means allow all”. - Open existing Input Config assets and fix the new validation errors.
- Review processors with empty
InputTagsand confirm that matching every input is intended. - If gameplay listens for “close all windows”, handle one close event per window.
- If the project deliberately disabled StateTree, resolve that hard dependency first.