Переход на входной SDK версии 1.0.0-бета

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