В этом руководстве объясняется, как обновить вашу игру с версии 1.0 до 1.1 Input SDK для Unity. Инструкции для Java и Kotlin можно найти здесь .
Примечания к выпуску
Google Play Games на ПК поддерживает переназначение клавиш управления с клавиатуры в соответствии с настройками клавиш, предоставляемыми вашей игрой, с помощью Input SDK.
Пользователи получают доступ к этой функции, открывая всплывающее окно , выбирая элементы управления , а затем щелкая по действию, которое они хотят переназначить.
Google Play Games на ПК сопоставляет каждое переназначенное пользователем действие с настройкой по умолчанию в вашей игре. Таким образом, вашей игре не нужно знать о переназначении действий игроком. Если вам необходимо знать новое действие для внутриигрового события, например, для отображения элементов управления клавиатуры в вашей игре, вы можете дополнительно зарегистрировать функцию обратного вызова, чтобы получать уведомления о событиях переназначения.
Google Play Games на ПК сохраняет переназначенные пользователем элементы управления локально, чтобы они сохранялись между игровыми сессиями. Поскольку эти настройки хранятся локально, они не влияют на работу мобильного приложения и удаляются при удалении Google Play Games на ПК. Настройки не сохраняются на нескольких устройствах ПК.
Для включения переназначения клавиш в игре обновление Input SDK не требуется, однако переназначение будет отключено, если будет обнаружена неподдерживаемая конфигурация .
Если вы хотите управлять процессом переназначения клавиш или эта функция отключена в вашей игре, выполните следующие действия:
- Обновите Input SDK до
1.1.1-beta. - Обновите все сочетания клавиш, чтобы избежать неподдерживаемых настроек .
- Обновите
InputMap, чтобы включить функцию переназначения клавиш.
Если вы хотите отключить функцию переназначения клавиш в игре, но при этом сохранить отображение версии настроек клавиш только для чтения, выполните следующие действия:
- Обновите Input SDK до
1.1.1-beta. - Обновите
InputMap, чтобы отключить функцию переназначения клавиш.
Вы можете обновить версию Input SDK до 1.1.1-beta , чтобы воспользоваться расширенными функциями переназначения клавиш в Google Play Games на ПК, используя InputContexts для определения элементов управления для различных сцен вашей игры, добавления коллбэков для отслеживания событий переназначения, определения набора зарезервированных клавиш, на которые пользователь не может переназначить клавиши, и отключения функции переназначения для каждого InputAction , InputGroup или InputMap .
При обновлении учитывайте следующие исключения:
Неподдерживаемые конфигурации
Переназначение входных сигналов отключается, если не выполняются следующие условия:
InputAction, использующий несколько клавиш, должен состоять из клавиши-модификатора и клавиши без модификатора. Например,Shift + A это верно, ноА + В ,Ctrl + Alt , иShift + A + Tab недействительно.Два или более объекта
InputActionилиInputGroupне могут иметь один и тот же уникальный идентификатор.
Представляем InputContext
InputContext позволяет игре использовать одну и ту же клавишу для разных действий без конфликтов. Таким образом, если в игре используется пробел для прыжка и подтверждения выбора в меню, игроки могут переназначать клавиши по отдельности.
Следующая диаграмма последовательности показывает, как работает API setInputContext() во время выполнения:

Обновление
Игры, использующие предыдущие версии Input SDK, по-прежнему поддерживают базовое переназначение клавиш, если только они не используют неподдерживаемую конфигурацию . Если ваша игра использует более старую версию Input SDK, рекомендуется ознакомиться с руководством по обновлению с версии 0.0.4 до 1.0.0-beta .
Обновление до версии 1.1.1-beta открывает доступ к новым функциям, в том числе:
- Инициирование изменений контекста.
- Получение уведомлений о ключевых событиях картографирования.
- Отключение переназначения для каждого действия, группы, контекста или карты.
Установка
Доступен плагин Unity версии 1.1.1-beta. Вам необходимо удалить все предыдущие версии Input SDK, установленные в вашей игре, и обновить их до текущей версии.
Чтобы добавить Input SDK v1.1.1-beta в вашу игру, см. раздел «Добавление SDK» .
Определите статические поля
Для версии 1.1.1-beta рекомендуется определять InputActions , InputGroups , InputContexts и InputMap как статические поля класса InputMappingProvider , поскольку эти поля будут доступны из других частей вашего приложения:
#if PLAY_GAMES_PC
using Java.Lang;
using Java.Util;
using Google.Android.Libraries.Play.Games.Inputmapping;
using Google.Android.Libraries.Play.Games.Inputmapping.Datamodel;
public class InputSDKMappingProvider : InputMappingProviderCallbackHelper
{
public static readonly string INPUT_MAP_VERSION = "1.0.0";
private static readonly InputAction driveInputAction =
InputAction.Create(...);
private static readonly InputGroup roadInputGroup = InputGroup.Create(...);
public static readonly InputContext roadControlsContext =
InputContext.Create(...);
public static readonly InputMap inputMap = InputMap.Create(...);
public override InputMap OnProvideInputMap()
{
return inputMap;
}
}
#endif
Обновите ваши InputActions.
Метод InputAction.create() из Input SDK 1.0.0-beta устарел. Объект InputAction имеет идентификатор версии и может быть помечен как переназначаемый или нет. Объект InputAction определенный с помощью метода create() из Input SDK 1.0.0-beta , по умолчанию является переназначаемым и не имеет информации о версии:
Функция InputAction в Input SDK 1.0.0-beta
var driveAction = PlayInputAction.Create(
"Drive",
(long)InputEventIds.DRIVE,
PlayInputControls.Create(
new[] { AndroidKeyCode.KEYCODE_SPACE },
new List<PlayMouseAction>()
)
);
Функция InputAction в Input SDK 1.1.1-beta
private static readonly InputAction driveInputAction = InputAction.Create(
"Drive",
(long)InputEventIds.DRIVE,
InputControls.Create(
new[] { new Integer(AndroidKeyCode.KEYCODE_SPACE) }.ToJavaList(),
new ArrayList<Integer>()),
InputEnums.REMAP_OPTION_ENABLED
);
Функция InputAction в Input SDK 1.1.1-beta (с указанием версии)
private static readonly InputAction driveInputAction = InputAction.Create(
"Drive",
InputControls.Create(
new[] { new Integer(AndroidKeyCode.KEYCODE_SPACE) }.ToJavaList(),
new ArrayList<Integer>()),
InputIdentifier.Create(
INPUT_MAP_VERSION, (long)InputEventIds.DRIVE),
InputEnums.REMAP_OPTION_ENABLED
);
Для получения дополнительной информации о версионировании сочетаний клавиш см. раздел «Отслеживание идентификаторов клавиш» .
Обновите ваши InputGroups
В Input SDK 1.1.1-beta необходимо однозначно идентифицировать каждую InputGroup . Каждое InputAction принадлежит к InputGroup — набору связанных действий. Это улучшает навигацию и удобство использования элементов управления во время игры. Подобно тому, как InputAction должен иметь уникальный идентификатор среди всех действий в одном InputContext , InputGroup должен иметь уникальный идентификатор среди существующих групп.
В примерах этого раздела игра имеет два объекта InputContext , представляющих главное меню и игровой процесс. Для каждой InputGroup в этих контекстах отслеживаются соответствующие идентификаторы с помощью следующего перечисления:
public enum InputGroupsIds
{
// Main menu scene
BASIC_NAVIGATION, // WASD, Enter, Backspace
MENU_ACTIONS, // C: chat, Space: quick game, S: store
// Gameplay scene
BASIC_MOVEMENT, // WASD, space: jump, Shift: run
MOUSE_ACTIONS, // Left click: shoot, Right click: aim
EMOJIS, // Emojis with keys 1,2,3,4 and 5
GAME_ACTIONS, // M: map, P: pause, R: reload
}
Как и InputAction , метод InputGroup.create() из Input SDK 1.0.0-beta устарел. Вам необходимо обновить InputGroup в вашей игре, указав идентификатор версии и логическое значение, указывающее, можно ли переназначать объекты InputAction в ваших группах. Группы, созданные с помощью устаревшего метода create() из Input SDK 1.0.0-beta , являются переназначаемыми, имеют ID 0, а идентификатор версии представляет собой пустую строку ( "" ):
InputGroup в Input SDK 1.0.0-beta
var gameInputGroup = PlayInputGroup.Create(
"Road controls",
new List<PlayInputAction>
{
driveAction,
turboAction,
openGarageAction,
openPgsAction,
openStoreAction
}
);
InputGroup в Input SDK 1.1.1-beta
private static readonly InputGroup roadInputGroup = InputGroup.Create(
"Road controls",
new[]
{
driveInputAction,
turboInputAction,
openGarageInputAction,
openPgsInputAction,
openStoreInputAction,
}.ToJavaList(),
(long)InputGroupsIds.ROAD_CONTROLS,
// All input actions of this group will be remappable unless specified
// the contrary by the individual input actions.
InputEnums.REMAP_OPTION_ENABLED
);
InputGroup в Input SDK 1.1.1-beta (со строкой версии)
private static readonly InputGroup roadInputGroup = InputGroup.Create(
"Road controls",
new[]
{
driveInputAction,
turboInputAction,
openGarageInputAction,
openPgsInputAction,
openStoreInputAction,
}.ToJavaList(),
InputIdentifier.Create(
INPUT_MAP_VERSION, (long)InputGroupsIds.ROAD_CONTROLS),
// All input actions of this group will be remappable unless specified
// the contrary by the individual input actions.
InputEnums.REMAP_OPTION_ENABLED
);
Для получения дополнительной информации о версионировании сочетаний клавиш см. раздел «Отслеживание идентификаторов клавиш» .
Обновите InputMap.
Метод InputMap.create() из Input SDK 1.0.0-beta устарел. Обновите свой InputMap , указав идентификатор версии, полностью отключив функцию переназначения клавиш или назначив список зарезервированных клавиш для вашей игры, которые вы не хотите, чтобы пользователь использовал для переназначения. Каждый InputMap определенный с помощью метода create() из Input SDK 1.0.0-beta , по умолчанию допускает переназначение, идентифицируется с ID 0 и не содержит зарезервированных клавиш.
InputMap в Input SDK 1.0.0-beta
var gameInputMap = PlayInputMap.Create(
new List<PlayInputGroup>
{
gameInputGroup,
menuInputGroup
},
PlayMouseSettings.Create(false, false)
);
InputMap в Input SDK 1.1.1-beta
public static readonly string INPUT_MAP_VERSION = "1.0.0";
public static readonly long INPUT_MAP_ID = 0;
public static readonly InputMap inputMap = InputMap.Create(
new[] { roadInputGroup, menuInputGroup }.ToJavaList(),
MouseSettings.Create(false, false),
InputIdentifier.Create(INPUT_MAP_VERSION, INPUT_MAP_ID),
// Use ESC as reserved key
InputEnums.REMAP_OPTION_ENABLED,
new[]
{
InputControls.Create(new[]
{
new Integer(AndroidKeyCode.KEYCODE_ESCAPE)
}.ToJavaList(),
new ArrayList<Integer>())
}.ToJavaList()
);
Что дальше?
Продолжите обновление до версии 1.1.1-beta, назначив разные элементы управления для разных сцен с помощью InputContexts или обновив пользовательский интерфейс игры, получая уведомления о событиях переназначения с помощью InputRemappingListeners .
При обновлении сочетаний клавиш ознакомьтесь с рекомендациями по разработке сочетаний клавиш и учтите ограничения и недостатки функции переназначения.