Skip to main content

Inputs

Important Attention Reminder

Coding Style wiki


Inputs is the static input-dispatch facade of InputSystem. Internally, the InputCenter singleton (internal) manages the registration caches, split into two API groups: Inputs.CM (Control Map — manages Unity New InputSystem IInputActionCollection control maps) and Inputs.IA (Input Action — registers and drives IInputAction universal signal dispatchers).

NamespaceOxGKit.InputSystem
Typepublic static class Inputs (contains nested public static class CM and public static class IA)
SourceInputCenter.cs
using OxGKit.InputSystem;

Quick Start

using OxGKit.InputSystem;

// 1. Register the Control Map (Unity New InputSystem generated class, auto-Enabled on registration)
Inputs.CM.RegisterControlMap<PlayerControls>();

// 2. Register the Input Action (OnCreate is called automatically on registration to bind events)
Inputs.IA.RegisterInputAction<PlayerAction>();

// 3. Subscribe to the input signals dispatched by the Input Action
Inputs.IA.GetInputAction<PlayerAction>().onMoveAction += OnMoveActionHandler;

// 4. Drive updates every frame from the main MonoBehaviour (Update)
Inputs.IA.DriveUpdate(Time.unscaledDeltaTime);

General Rules

Registration Order

Important Register Control Maps first, then Input Actions: an Input Action's OnCreate usually fetches a control map via GetControlMap for binding; if the Control Map is not registered yet, it returns null and the bindings are silently skipped.

Driving Updates

Important Exactly one main MonoBehaviour should call DriveUpdate: forgetting it disables every OnUpdate-based polling behavior, while calling it from several places double-ticks them.

Duplicate Registration

Attention The registries use a static cache: registering the same type twice logs a warning and keeps the first registered instance; restart flows (scene reloads) should account for this behavior.


Inputs.CM (Control Map)

Manages Unity New InputSystem control maps (Input Action Asset generated classes, constrained to IInputActionCollection).

Method Overview

MethodDescription
RegisterControlMapRegisters a control map (auto-Enabled on registration).
GetControlMapGets a registered control map.
SetActiveToggles a control map (Enable / Disable).
IsActiveChecks a control map's active state.

RegisterControlMap

public static void RegisterControlMap<TIInputActionCollection>() where TIInputActionCollection : IInputActionCollection, new()

Registers a control map (Input Action Asset); internally creates an instance via new() and automatically Enables it (input is received right after registration).

Inputs.CM.RegisterControlMap<PlayerControls>();

Attention Registering the same type twice logs the warning [ControlMap] <TypeName> already exist. and keeps the first registered instance.

GetControlMap

public static TIInputActionCollection GetControlMap<TIInputActionCollection>() where TIInputActionCollection : IInputActionCollection

Gets the registered control map instance; returns default (null) when not registered — combine with a null check.

var ctrls = Inputs.CM.GetControlMap<PlayerControls>();
if (ctrls != null)
{
ctrls.Player.Move.performed += this.OnMoveAction;
}

SetActive

public static void SetActive<TIInputActionCollection>(bool active) where TIInputActionCollection : IInputActionCollection

Toggles the control map: true calls Enable(), false calls Disable() (e.g., mute player input during UI modes or cutscenes); logs the error [ControlMap] <TypeName> cannot found. when not registered.

// Disable the whole control map
Inputs.CM.SetActive<PlayerControls>(false);

// Toggle a single Action Map only (using native Unity New InputSystem API)
Inputs.CM.GetControlMap<PlayerControls>()?.Player.Disable();
Inputs.CM.GetControlMap<PlayerControls>()?.Player.Enable();

IsActive

public static bool IsActive<TIInputActionCollection>() where TIInputActionCollection : IInputActionCollection

Checks the control map's active state; logs an error and returns false when not registered.

bool isActive = Inputs.CM.IsActive<PlayerControls>();

Inputs.IA (Input Action)

Registers and drives IInputAction (universal signal dispatchers that do not depend on any input plugin).

Method Overview

MethodDescription
RegisterInputActionRegisters an Input Action (OnCreate is called automatically on registration).
GetInputActionGets a registered Input Action.
DriveUpdateDrives every Input Action's OnUpdate (call from the main Update).
UpdateInputActions(Obsolete) Deprecated, use DriveUpdate instead.

RegisterInputAction

public static void RegisterInputAction<TInputAction>() where TInputAction : IInputAction, new()

Registers an Input Action; internally creates an instance via new() and automatically calls OnCreate (usually where the Control Map is fetched for event binding).

// Register Control Maps first, then Input Actions
Inputs.CM.RegisterControlMap<PlayerControls>();
Inputs.IA.RegisterInputAction<PlayerAction>();

Attention Registering the same type twice logs the warning [InputAction] <TypeName> already exist. and keeps the first registered instance.

GetInputAction

public static TInputAction GetInputAction<TInputAction>() where TInputAction : IInputAction

Gets the registered Input Action instance (for subscribing and unsubscribing events); returns default (null) when not registered.

// Subscribe to input signals
Inputs.IA.GetInputAction<PlayerAction>().onMoveAction += this._OnMoveAction;

// Unsubscribe from input signals
Inputs.IA.GetInputAction<PlayerAction>().onMoveAction -= this._OnMoveAction;

DriveUpdate

public static void DriveUpdate(float dt)

Drives the OnUpdate of all registered Input Actions (passing dt); call it from the main MonoBehaviour (Update).

private void Update()
{
// Call by Main MonoBehaviour (Main Program)
Inputs.IA.DriveUpdate(Time.unscaledDeltaTime);
}

Important Exactly one owner should call it: if an OnUpdate-based polling behavior is dead, first check that DriveUpdate is being called every frame.

UpdateInputActions

[Obsolete("UpdateInputActions is deprecated. Use DriveUpdate instead.")]
public static void UpdateInputActions(float dt)

(Obsolete) Behaves the same as DriveUpdate; use DriveUpdate instead (deprecated since v1.0.3).


Logger

This module's logger (a Logging implementation of OxGKit.LoggingSystem) with the logger name OxGKit.InputSystem.Logger; its toggle and level can be configured through LoggingLauncher.

Type[LoggerName("OxGKit.InputSystem.Logger")] public class Logger : Logging
SourceLogger.cs

Reminder For builds, add the OXGKIT_LOGGER_ON symbol following the LoggingSystem rules, otherwise this module's logs are not printed.