# InvalidOperationException: InputAction 'Player/Move' is not enabled. Cannot read value.

- **ID:** `unity/input-system-action-not-found`
- **Domain:** unity
- **Category:** runtime_error
- **Verification:** ai_generated
- **Fix Rate:** 92%

## Root Cause

An InputAction is being read via ReadValue() before it has been enabled (e.g., before InputSystem.EnableDevice or action map activation).

## Version Compatibility

| Version | Status | Introduced | Deprecated |
|---------|--------|------------|------------|
| Unity 2022.3 | active | — | — |
| Unity 2023.1 | active | — | — |
| Unity 2021.3 | active | — | — |
| Input System 1.6.0 | active | — | — |

## Workarounds

1. **Enable the action map before reading values: `InputActionMap actionMap = inputActions.FindActionMap("Player"); actionMap.Enable();` then call `inputActions.FindAction("Move").ReadValue<Vector2>();`** (90% success)
   ```
   Enable the action map before reading values: `InputActionMap actionMap = inputActions.FindActionMap("Player"); actionMap.Enable();` then call `inputActions.FindAction("Move").ReadValue<Vector2>();`
   ```
2. **Use event-based callbacks instead of polling: `inputActions.Player.Move.performed += ctx => { Vector2 value = ctx.ReadValue<Vector2>(); };`** (95% success)
   ```
   Use event-based callbacks instead of polling: `inputActions.Player.Move.performed += ctx => { Vector2 value = ctx.ReadValue<Vector2>(); };`
   ```
3. **Delay the first read until after InputSystem.Update() by checking `InputSystem.isInitialized` and using a coroutine.** (85% success)
   ```
   Delay the first read until after InputSystem.Update() by checking `InputSystem.isInitialized` and using a coroutine.
   ```

## Dead Ends

- **** — Calling Enable() on the action inside Start() or Awake() may still fail if the InputSystem hasn't initialized yet. (30% fail)
- **** — Disabling and re-enabling the action map in Update() causes repeated overhead and doesn't fix timing. (50% fail)
- **** — Using InputAction.ReadValue<float>() without checking isPressed first can still throw if not enabled. (60% fail)
