Remember the weird error we got in Lesson 1? Yeah, we will revert the change we made then to accommodate the new changes we are applying now.
<aside> ☝
Head to the Window tab, and follow these steps: → Go to Package Manager, then search for “Input System” and make sure it is installed
</aside>

<aside> ☝
Ensure your “Active Input Handling” is set to “Both”: Head now to the “Edit” Tab and follow these steps → Go to Project Settings, then find Player.
→ In “Player”, scroll down to the Other Settings dropdown, then set “Active Input Handling” to both
</aside>

Before we tackle the new system package, let's ensure our Movement script is ready to import and initialize the new stuff we are making
<aside> ☝
On Movement.cs, add these lines of code before the “Start()” function
</aside>
// Input Action Asset to handle our input actions
[SerializeField] private InputActionAsset inputActions;
// Input Action for movement
private InputAction moveAction;
Now let’s set up the new input system. This is called an Input Action Asset, as it technically works as an asset, like the other game objects we’ve been coding. Lets breakdown what these layers do:
<aside> ☝
On the Edit Tab, go to Project Settings → Input System Package → Create and Assign a Default Project-Wide Action Asset
</aside>
Let’s break down what these layers mean
Input Action: The individual events/commands. These are what tell our code what action the user has performed based on the keys it pressed.
For instance, our “Move” action is strictly responsible for creating callbacks when the user presses their controller's left stick or WASD.

You’ll notice as well, you can add certain properties to your actions

Input Action Map: This is a collection of related input actions.

Input Action Asset: This is the entire input configuration file. A database that stores all your input action maps.

The beauty of Unity is that implementing controller support is as easy as implementing keyboard input. We will further explore the powerful input management of Unity!