В этом руководстве описано, как перевести вашу игру Unity на использование последней версии Input SDK. Версия 1.0.0-beta SDK содержит существенные улучшения по сравнению с предыдущей предварительной версией 0.0.4 . Вам следует как можно скорее перейти с более ранних предварительных версий. SDK версии 0.0.4 будет продолжать работать до марта 2023 года.
Обновить ссылки
Классы получили префикс Play , чтобы избежать конфликтов имен с Unity. Всякий раз, когда вы видите сообщение об ошибке, подобное следующему:
Ошибка CS0246: Тип или имя пространства имен 'InputMappingProvider' не найдены (возможно, отсутствует директива using или ссылка на сборку?).
Необходимо добавить префикс 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
)
);
Обновите каждую группу ввода.
Подобно 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();