В этом руководстве описывается, как перенести игру Unity для использования последней версии Input SDK. Бета-версия SDK 1.0.0 имеет существенные улучшения по сравнению с предыдущей предварительной версией 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
также использует 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();