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
- Cinemachine 2 FreeLook and POV cameras read
Input.GetAxisby default. Add a Cinemachine Input Provider component and assign an Input Action. Cinemachine 3 uses Cinemachine Input Axis Controller instead. - Standard Assets and older tutorials (first-person controllers, mouse look scripts) all use the old API.
- Asset Store tools often support both through scripting defines. Check their documentation for an Input System option.
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.
Related problems
- How to Fix the Unity Input System Not Working
- Fix: Unity Input System Gamepad Not Detected or Disconnecting
- Fix: Unity UI Button Not Responding to Clicks
- How to Fix “Multiple EventSystems in scene” in Unity
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.