Quick answer: Your project only enables the new Input System, and something still calls the old Input class. The usual culprit is the EventSystem's StandaloneInputModule; replace it with InputSystemUIInputModule. For your own scripts, port Input.GetKey and friends to the Input System API. The quick fix is Player Settings > Active Input Handling > Both.

This exception floods the Console the moment you press Play in a project that uses the new Input System, often a fresh Unity 6 project or one where you just installed the Input System package. It is easy to fix once you know which code is still asking the old input manager for input.

The exact error

InvalidOperationException: You are trying to read Input using the UnityEngine.Input class, but you have switched active Input handling to Input System package in Player Settings.

It repeats every frame because whatever calls Input runs in Update. Click one of the messages and read the stack trace: the first line that is not inside UnityEngine.Input tells you who is calling it.

What the setting does

Edit > Project Settings > Player > Other Settings > Active Input Handling has three options: Input Manager (Old), Input System Package (New) and Both. When it is set to the new package only, the legacy UnityEngine.Input API is switched off and every call throws this exception. Installing the Input System package offers to switch to the new backend, and recent project templates start with it, so code written for the old API breaks immediately.

Fix 1: replace the EventSystem input module

If the stack trace mentions UnityEngine.EventSystems.BaseInput or StandaloneInputModule, the caller is your UI. Select the EventSystem object in each scene. Its Standalone Input Module shows a button, Replace with InputSystemUIInputModule; click it. Do the same in every scene and prefab that contains an EventSystem, or UI clicks will break in some scenes and not others.

Fix 2: port your own scripts

The direct replacements for common legacy calls:

using UnityEngine.InputSystem;

// Input.GetKeyDown(KeyCode.Space)
bool jump = Keyboard.current != null && Keyboard.current.spaceKey.wasPressedThisFrame;

// Input.GetMouseButton(0)
bool firing = Mouse.current != null && Mouse.current.leftButton.isPressed;

// Input.mousePosition
Vector2 pointer = Mouse.current.position.ReadValue();

// Input.GetAxis("Horizontal") from a gamepad
float x = Gamepad.current?.leftStick.ReadValue().x ?? 0f;

For anything beyond prototypes, define an Input Actions asset and read actions rather than devices, so keyboard, gamepad and rebinding work through one path.

Fix 3: third-party assets and older packages

To find every caller, search the project for Input.Get, Input.mousePosition and Input.touches.

Fix 4: allow both while you migrate

Set Active Input Handling to Both and let Unity restart. Old and new APIs then work side by side, which is the pragmatic choice for a project mid-migration or one that depends on assets you cannot change. Some platforms and newer Unity versions warn about the legacy manager, so treat Both as a bridge rather than a destination.

For code that must compile either way, Unity defines scripting symbols you can test:

#if ENABLE_INPUT_SYSTEM
    bool pause = Keyboard.current.escapeKey.wasPressedThisFrame;
#else
    bool pause = Input.GetKeyDown(KeyCode.Escape);
#endif

Input errors in shipped builds

The editor shows this error loudly; a build that ships with one forgotten Input call in a rarely used menu fails quietly on players' machines. Bugnet's Unity SDK hooks Unity's log stream, so exceptions and errors in a player's build are filed automatically with the last log lines, a screenshot, the device, OS and build version, and identical ones stack into a single issue with a count. A stray input exception in the credits screen shows up as one issue with its stack trace, not as a mystery review.

Frequently asked questions

How do I fix “You are trying to read Input using the UnityEngine.Input class”?

Replace the EventSystem’s Standalone Input Module with InputSystemUIInputModule, port your scripts from Input to the Input System API, or set Active Input Handling to Both in Player Settings.

Where is Active Input Handling in Unity?

In Edit, Project Settings, Player, Other Settings. The options are Input Manager (Old), Input System Package (New) and Both. Changing it restarts the editor.

Why does my UI cause the UnityEngine.Input exception?

The EventSystem still uses StandaloneInputModule, which reads the legacy Input class. Click Replace with InputSystemUIInputModule on the EventSystem in every scene.

Read the first stack frame outside UnityEngine.Input. Nine times out of ten it is the EventSystem.