This guide describes how to migrate your Unity game to use the latest Input SDK. The 1.0.0-beta SDK has substantial improvements over the previous 0.0.4 preview. You should migrate from the earlier previews as soon as possible. The 0.0.4 SDK will continue to function through March 2023.
Update references
Classes received the Play prefix to avoid naming collisions with Unity.
Whenever you see the an error message similar to:
error CS0246: The type or namespace name 'InputMappingProvider' could not be found (are you missing a using directive or an assembly reference?)
you must add the Play prefix to the class name. For example,
InputMappingProvider becomes PlayInputMappingProvider.
Update each InputAction
InputAction is now constructed with a call to PlayInputAction.Create as opposed
to creating a new struct with named fields.
Locate any code that calls new InputAction:
var driveAction = new InputAction
{
ActionLabel = "Drive",
UniqueId = (int)InputEventIds.DRIVE,
InputControls = new InputControls
{
AndroidKeycodes = new[] { AndroidKeyCode.KEYCODE_SPACE }
}
};
And replace it with a call to PlayInputAction.Create:
var driveAction = PlayInputAction.Create(
"Drive",
(int)InputEventIds.DRIVE,
PlayInputControls.Create(
new[] { AndroidKeyCode.KEYCODE_SPACE },
null
)
);
Update each InputGroup
Like InputAction, InputGroup now has an PlayInputGroup.Create call rather
than requiring that you manually fill out a struct.
This means that you should locate any calls to new InputGroup:
var gameInputGroup = new InputGroup
{
GroupLabel = "Game controls",
InputActions = new List<InputAction>
{
driveAction,
turboAction,
openGarageAction,
openStoreAction
}
};
And replace it to a call to PlayInputGroup.Create:
var gameInputGroup = PlayInputGroup.Create(
"Game controls",
new List<PlayInputAction>
{
driveAction,
turboAction,
openGarageAction,
openStoreAction
}
);
Update the InputMap
InputMap uses PlayInputMap.Create as well instead of constructing a new
struct.
Locate any calls to new InputMap:
return new InputMap
{
InputGroups = new List<InputGroup>
{
gameInputGroup,
menuInputGroup
},
MouseSettings = new MouseSettings
{
AllowMouseSensitivityAdjustment = false,
InvertMouseMovement = false
}
};
And replace it with a call to PlayInputMap.Create:
return PlayInputMap.Create(
new List<PlayInputGroup>
{
gameInputGroup,
menuInputGroup
},
PlayMouseSettings.Create(false, false)
);
Rename the PlayInputMappingClient methods
For PlayInputMappingClient, RegisterInputMappingProvider has been renamed to
SetInputMappingProvider.
So locate any calls to RegisterInputMappingProvider:
Input.GetInputMappingClient().RegisterInputMappingProvider(_inputMappingProvider);
And replace them with a call to SetInputMappingProvider:
PlayInputMappingClient inputMappingClient =
Google.Play.InputMapping.PlayInput.GetInputMappingClient();
inputMappingClient.SetInputMappingProvider(_inputMapProvider);
UnregisterInputMappingProvider has also been renamed to
ClearInputMappingProvider and no longer requires your previously registered
InputMappingProvider as a parameter.
Locate any calls to UnregisterInputMappingProvider:
Input.GetInputMappingClient().UnregisterInputMappingProvider(_inputMapProvider);
And replace them with ClearInputMappingProvider:
PlayInput.GetInputMappingClient().ClearInputMappingProvider();