Как перейти на Input SDK 1.0.0-beta

В этом руководстве описано, как перенести игру 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();