В этом руководстве описано, как перенести игру Unity на последнюю версию Input SDK. В SDK 1.0.0-beta внесены существенные улучшения по сравнению с предыдущей предварительной версией 0.0.4. Рекомендуем как можно скорее перейти на новую версию. SDK версии 0.0.4 будет работать до марта 2023 г.
Обновить цифровые отпечатки
Чтобы избежать конфликтов имен с Unity, к классам был добавлен префикс Play.
Если вы видите сообщение об ошибке, похожее на это:
error CS0246: The type or namespace name 'InputMappingProvider' could not be found (are you missing a using directive or an assembly reference?)
необходимо добавить префикс Play к названию класса. Например, InputMappingProvider превратится в PlayInputMappingProvider.
Обновите каждое действие InputAction
InputAction теперь создается с помощью вызова PlayInputAction.Create, а не нового struct с именованными полями.
Найдите код, который вызывает new InputAction:
var driveAction = new InputAction
{
ActionLabel = "Drive",
UniqueId = (int)InputEventIds.DRIVE,
InputControls = new InputControls
{
AndroidKeycodes = new[] { AndroidKeyCode.KEYCODE_SPACE }
}
};
и замените его вызовом PlayInputAction.Create:
var driveAction = PlayInputAction.Create(
"Drive",
(int)InputEventIds.DRIVE,
PlayInputControls.Create(
new[] { AndroidKeyCode.KEYCODE_SPACE },
null
)
);
Обновите каждый объект InputGroup
Как и в случае с InputAction, в InputGroup теперь есть вызов PlayInputGroup.Create, поэтому вам не нужно вручную заполнять struct.
Это означает, что вам нужно найти все вызовы new InputGroup:
var gameInputGroup = new InputGroup
{
GroupLabel = "Game controls",
InputActions = new List<InputAction>
{
driveAction,
turboAction,
openGarageAction,
openStoreAction
}
};
и замените его вызовом PlayInputGroup.Create:
var gameInputGroup = PlayInputGroup.Create(
"Game controls",
new List<PlayInputAction>
{
driveAction,
turboAction,
openGarageAction,
openStoreAction
}
);
Обновите InputMap
InputMap также использует PlayInputMap.Create вместо создания новой структуры.
Найдите вызовы new InputMap:
return new InputMap
{
InputGroups = new List<InputGroup>
{
gameInputGroup,
menuInputGroup
},
MouseSettings = new MouseSettings
{
AllowMouseSensitivityAdjustment = false,
InvertMouseMovement = false
}
};
и замените его вызовом PlayInputMap.Create:
return PlayInputMap.Create(
new List<PlayInputGroup>
{
gameInputGroup,
menuInputGroup
},
PlayMouseSettings.Create(false, false)
);
Переименуйте методы PlayInputMappingClient
Для PlayInputMappingClient RegisterInputMappingProvider переименован в SetInputMappingProvider.
Чтобы найти все вызовы RegisterInputMappingProvider, выполните следующие действия:
Input.GetInputMappingClient().RegisterInputMappingProvider(_inputMappingProvider);
и замените их вызовом SetInputMappingProvider:
PlayInputMappingClient inputMappingClient =
Google.Play.InputMapping.PlayInput.GetInputMappingClient();
inputMappingClient.SetInputMappingProvider(_inputMapProvider);
Метод UnregisterInputMappingProvider переименован в ClearInputMappingProvider и больше не требует ранее зарегистрированного параметра InputMappingProvider.
Найдите вызовы UnregisterInputMappingProvider:
Input.GetInputMappingClient().UnregisterInputMappingProvider(_inputMapProvider);
и замените их на ClearInputMappingProvider:
PlayInput.GetInputMappingClient().ClearInputMappingProvider();