Input System Introduction and Links

Quick Links:

What is it?

A replacement for UnityEngine.Input. In short, it's an input system for use at runtime in Unity which is primarily meant to provide

  • Standardization: inputs should generally be mapped correctly across different hardware and platforms.
  • Extensibility: adding support for new devices and taking control of input should be easy.

What's the status?

1.0 has been released and is verified for Unity 2020.1. We're working on getting it to verified status for 2019.4 LTS.

What versions of Unity are supported?

We support Unity versions starting with 2019.1. We intend to move the minimum requirement up to 2019.4 LTS as soon as that version is out. (////EDIT: Starting with 1.1-preview.1 the min requirement has been moved up to 2019.4)

With the 1.x line of the package, we will keep Unity 2019.4 LTS as the minimum supported version and intend to backport all relevant fixes.

What platforms are supported?

All platforms that are officially supported by Unity.

How do I get it?

You can install it from the package manager inside of Unity.

How do I get started?

The easiest way to get started is generally using the new PlayerInput component. You can find step by step instructions here.

The condensed version:

  • Add a PlayerInput component to your GameObject.
  • Click "Create Actions..." in the inspector for it and hit enter.
  • Done :)

From there, you can customize the generated .inputactions file as well as the settings on PlayerInput to suit your needs.

There's also a number of samples that come with the input system package. You can install them from the Unity Package Manager window by going to the page for the input system and selecting from the "Samples" list.

Finally, there's a recording of a webinar that was part of Unite Now and an accompanying demo project.

Where do I report issues?

The preferred way is using the Unity bug reporter. This ensures that the report will go through our established QA channels.

The bug reporter can be launched from the Unity editor's main menu under "Help >> Report a Bug...".

Where do I ask questions?

In this forum section :)

Where is it going?

We are working on further building out functionality in the following areas:

  • Gestures and improved touch support: We do not yet have support for gestures and our touch support is basic. We're working on improved touch support.
  • Improved action system: Several enhancements to the action system are in the works.

  • Improved polling API

  • API for setting parameters on processors dynamically

  • Action stacks / method to have actions preempt each other's input

  • Workflow improvements

  • DOTS: Dedicated support for DOTS.

  • Broader controller support: Our current set of officially supported controllers is still very limited (basically: Xbox, PS4, Switch). We intend to expand on this over time. It is possible to add support for custom HIDs as well as completely custom devices.

Also, our documentation and tutorials are still a work-in-progress.

What will happen to UnityEngine.Input?

There is no final plan on this yet. Ideally, we want to keep the API supported indefinitely through a compatibility layer that reimplements it on top of the input system.

For now, the choice of which input method to use is up to you. The backends can be toggled via a player setting (including both backends being enabled).

Does it....?

  • ... do everything the old system does: Not yet. There are still some things (support for Unity Remote, "gravity" settings on bindings, and some other things) that the input system doesn't do yet. We're working on it. A list of known limitations can be found here.

  • ... support runtime rebinding: Yes.

  • ... support uGUI: Yes.

  • ... support the new UI Toolkit: Not yet. We're working on it. Support for the input system will be released concurrently with player support for UI Toolkit becoming officially supported.

  • ... support IMGUI: No. We don't intend to provide support for the UnityEngine.GUI API in the player. If you are using IMGUI in runtime code, you have the option of keeping the old input system running alongside the new one in order to keep IMGUI controls working.

  • ... support the XR Interaction Toolkit: Not yet. It's being worked on. Our XR support is currently in the process of migrating over fully to the input system.

  • ... support DOTS: Not yet. We're working on it.

  • ... support gestures: Not yet. We're working on it.

  • ... support controller XYZ: Our current set of officially supported controllers is still very limited (basically: Xbox, PS4, Switch). We intend to expand on this over time. It is possible to add support for custom HIDs as well as completely custom devices. For implementing custom input devices, this video may help.

  • ... support automating input: Yes.

  • ... work on Xbox/PS4/Switch: Yes. However, due to NDA constraints, you need to install an additional package for each platform. You can obtain the package from the respective, licensee-only forum.

  • ... support local multiplayer: Yes. In most cases, the easiest way to get started is using PlayerInputManager. In general, though, you can simply instantiate however many PlayerInputs you need and each will be a separate player. There is also a lower-level API called InputUser which does not rely on GameObjects.