Best Practices and FAQ
This page consolidates reusable advice and answers from the legacy documents, rewritten against GenericInputSystem 1.6 source. Keep input mapping, permission rules, and action handling as separate concerns; the project remains responsible for gameplay behavior and network synchronization.
Practical guidance
Give Gameplay Tags stable action meanings
Maintain the Gameplay Tag to Input Action mapping in InputConfig. Let InputControlSetup own permission rules and InputProcessor send accepted input to movement, combat, ability, or UI code. Avoid copying the same permission checks into several action callbacks.
Separate validation from response
Use a Checker to decide whether a tag and phase are allowed, and a Processor to decide what happens afterward. Keep each extension object focused. When several processors are configured, choose MatchAll or FirstOnly deliberately and review array order.
Scope setup changes to gameplay state
Pair PushInputSetup and PopInputSetup when entering and leaving combat, vehicle, or UI setups. PopInputSetup keeps the last default setup; pushing the same asset twice does not create another stack entry. StateTree projects can use GIPS Input Setup Scope to manage this lifecycle.
Use buffer windows deliberately
Open windows only during the gameplay interval that needs pre-input and ensure every exit path closes them. Several windows can be active at once, but releasing a buffered input from any window closes all active windows. Validate the current HighestPriority implementation before relying on strict priority: later matching input can overwrite an earlier stored entry. LastInput and Instant have the verified behaviors described in the buffering guide.
Choose internal or external processing explicitly
With bProcessingInputExternally enabled, internal checks, buffering, and processors are skipped. The component still broadcasts OnReceivedInput, including input that a permission rule would otherwise reject. External listeners must validate as needed and must not treat the event as proof that permission passed.
Keep synchronization in the gameplay layer
GIPS does not define a network-replication protocol for raw hardware input. Multiplayer projects own action prediction, server validation, and state synchronization. Do not assume Pawn tags or local input records automatically become authoritative network state.
Frequently asked questions
Input does not respond. What should I check?
Confirm the component is attached to a Pawn; the local player has an Enhanced Input Component; InputConfig contains valid tags and Input Actions; the required Input Mapping Context is added; and the component has at least one valid InputControlSetup. Editor validation requires InputConfig and at least one control setup.
OnReceivedInput fires, but no processor runs. Why?
The event broadcasts for every valid tagged callback, even if a Checker later rejects or buffers the input. Check bProcessingInputExternally, the current setup, each Checker rule, and Processor InputTags, TriggerEvents, and CheckCanHandleInput.
Why does the tag relationship checker miss GAS tags?
The default implementation reads tags from the Pawn through IGameplayTagAssetInterface. If project tags only live on an Ability System Component, derive UGIPS_InputChecker_TagRelationship and override GetActorTags.
A buffered input never releases. What should I check?
Confirm bEnableInputBuffer is enabled on the current setup; the window tag is defined and active; AllowedInputs includes the input tag and trigger phase; and the close API is called, unless the window uses Instant. A buffer window has no duration field.
Can multiple windows be active at once?
Yes. Windows with different tags can be active simultaneously, and one input can be accepted by several windows. Releasing a buffered input from any window closes all active windows. The current HighestPriority implementation can be overwritten by later input, so do not depend on its priority result yet.
How do I listen for exact or hierarchical tags?
Use the ListenInputEvent async node. Exact tag matching and normal input events are the defaults; choose hierarchical matching or buffered events when needed, and cancel the async action when it is no longer needed.
Does GIPS include full GAS or combat integration?
No. A project can use a custom UGIPS_InputProcessor to call its Ability System or gameplay code and a custom Checker to connect project-specific permission rules.
Related pages
- Quick Start and Integration
- Input System Component
- Input Control Setup
- Input Buffering System
- Debugging Guide