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

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