As Unity developers, it’s crucial for us to keep up our games to be accessible and enjoyable for players on multiple platforms. One important aspect of this is to ensure that the player can use a gamepad to interact with your game. Gamepad controls are really important for console games, but they also provide a richer and more comfortable experience for some players on their PC or mobile devices. In this article, we will take a closer look at how to implement gamepad controls in Unity, using the latest tools to ensure that your game allows gamepad users simply to play along.
Why Implement Gamepad Controls?
Gamepad support is very important in creating an immersive experience. Any modern controller, with its analog sticks, triggers, and buttons, has gameplay much more fluid and responsive than the keyboard and mouse. Even if you are making a mobile or a desktop game, providing the option to use a controller will make it more appealing.
Key Considerations:
Gamepad support widens the audience since you might be planning to release your game on consoles.
It is also easier on the gamepads in comparison to the conventional input for the users.
Customized controls allow re-mapping of buttons; hence, the players have access and functionality according to their choice.
Setting up Gamepad Support in Unity
Installing the Input System Package
The very initial step to add gamepad control in Unity is the setting up of the Input System package. This new Input System of Unity is powerful and flexible and has an excellent integration with gamepads as well as any other input devices.
- Open your Unity project.
- Open Window > Package Manager
- Select Search for: Input System in Package Manager.
- Download the package.
Once this completes, Unity will prompt you to switch to a new input system. Click on Yes to switch and activate it. Unity will then restart to apply the change.
Creating a Gamepad Configuration
When you have enabled the Input System, you will want to set up gamepad controls. Using Unity’s Input System makes it easy to map gamepad buttons and analog sticks to in-game actions.
Create an Input Actions Asset:
- Right-click inside your project window > Create > Input Actions
- Name your asset, for example, “GamepadControls.”
- Double-click the Input Actions file to open the Input Actions Editor.
Here, you can be defining various Actions like “Move, “Jump,” and “Attack.” For every action, you will bind it to the corresponding inputs in the gamepad.
Binding Gamepad Inputs
The most critical part of implementing gamepad support for your game is ensuring that you are linking the right actions to the appropriate buttons and analog sticks.
Example
1. Movement: You’ll be making use of the gamepad Left Stick to make the character move in your game.
- In the Input Actions Editor, you’ll create an action called “Move”.
- Under “Binding”, add a binding for Left Stick.
2. Jump: Press A on Xbox controllers, or Cross on PlayStation controllers to make your character jump.
- Create an action “Jump.”
- Bind the action to the A/Cross button on the gamepad
3. Attack: Bind Right Trigger (RT) for attacks.
- Create an “Attack” action.
- Bind it to Right Trigger (RT).
The Input Actions asset nicely displays these bindings and allows changing them later if needed.
Writing the Code to Read Gamepad Input
Having configured the Input Actions, the next step is to write the code that will handle the input gamepad. This code is what will generally make your player move around, jump, and attack given the gamepad input.
Basic Example of Gamepad Input Code
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerController : MonoBehaviour
{
private Gamepad gamepad;
private Vector2 moveInput;
private bool jumpPressed;
private void Start()
{
// Check if a gamepad is connected
gamepad = Gamepad.current;
}
private void Update()
{
if (gamepad != null)
{
// Movement: Left Stick
moveInput = gamepad.leftStick.ReadValue();
// Jump: A or Cross Button
jumpPressed = gamepad.buttonSouth.wasPressedThisFrame;
// Attack: Right Trigger
if (gamepad.rightTrigger.wasPressedThisFrame)
{
Attack();
}
MovePlayer();
}
}
private void MovePlayer()
{
// Use moveInput to move the player
Vector3 movement = new Vector3(moveInput.x, 0, moveInput.y);
transform.Translate(movement * Time.deltaTime * 5f);
}
private void Attack()
{
// Perform attack logic
Debug.Log("Attack button pressed!");
}
}In this example:
- Left Stick moves the player.
- A/Cross button is to make a player jump.
- Right Trigger is an attack.
This code is quite simple, but it can still be pretty easily expanded with more complex logic, animations, and effects.
Testing and Debugging Gamepad Controls
Once you have established gamepad controls, then you are ready to test them. You can attach a gamepad to your PC or use the input-testing tools available with Unity.
How To Test:
- Insert your gamepad.
- Play the game in the Editor.
- Test the buttons, the analog sticks, and the triggers to make sure all the actions are properly mapped
If particular buttons don’t work, check the Input Actions configuration or use the Input Debugger to debug the gamepad inputs.
Customizing and Remapping Controls
Many gamers like to personalize gamepad layouts. Unity’s Input System makes it simple to provide your game with remapping controls functionality.
How to Implement Control Remapping:
1. Create multiple bindings for an action in your Input Actions file.
- For example, you could bind the A button and the Right Trigger to the same “Jump” action.
2. Use a settings menu in your game to allow players to pick a preferred control scheme.
You can even save the preferences using PlayerPrefs or other data management solutions, so users can continue their customized controls between play sessions.
Creating More Advanced Controls
Adding More Complex Controls
While basic movement, jumping, and attacking can always be considered the most common actions for an FPS game (most played), camera controls, inventory navigation, and triggers can also be mapped onto a gamepad.
Advance Example:
- Right Stick for camera control, useful mainly for third-person games
- Directional Pad or D-pad for menu navigation
- Triggers for skill or item usage.
Each of these advanced control methods can be added to your Input Actions, and they have the potential to expand everything your game is capable of, giving players more agency in terms of interacting with your game.
Cross-Platform Gamepad Support
Unity’s Input System supports a lot of controllers, including Xbox, PlayStation, and generic gamepads. Still, test your game differently on other platforms in case they’re not compatible.
- Xbox Controllers: Test whether it works for both Xbox wired and wireless.
- PlayStation Controllers : Test with DualShock and DualSense controllers.
- Generic Controllers : Be sure your game supports off-brand gamepads, or generic controllers.
Conclusion
When your Unity games support gamepads, that can really add up to a difference within the entire scope of your games, especially when you will release them as console software or you want to allow your PC gamer to play them with their favorite controller. With the Unity Input System, gamepad controls are easier to establish than ever, with more flexible, intuitive handling of input.
With this article, you have good foundational knowledge of getting gamepad controls implemented into Unity. From setting up the Input System to writing code about the implementation of movement, jumping, and attacking, your game will be well on its way to offering full gamepad support.
Test, iterate, and allow players to customize their controls for the best experience!