В этом руководстве объясняется, как обновить игру с версии 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, чтобы включить переназначение клавиш в вашей игре, но переназначение будет отключено для вашей игры, если будет обнаружена неподдерживаемая конфигурация .
Если вы хотите управлять переназначением ввода или функция переназначения отключена в вашей игре, выполните следующие действия:
- Обновите входной SDK до
1.1.1-beta
. - Обновите все сочетания клавиш, чтобы избежать неподдерживаемых конфигураций .
- Обновите свой
InputMap
, чтобы включить функцию переназначения.
Если вы хотите отказаться от функции переназначения для своей игры, сохраняя при этом версию привязок клавиш, доступную только для чтения, выполните следующие действия:
- Обновите входной SDK до
1.1.1-beta
. - Обновите свой
InputMap
, чтобы отключить функцию переназначения.
Вы можете обновить версию Input SDK до 1.1.1-beta
, чтобы воспользоваться преимуществами расширенных функций переназначения в Google Play Games на ПК, используя InputContexts
для определения элементов управления для различных сцен вашей игры, добавления обратных вызовов для прослушивания событий переназначения, определения набор зарезервированных ключей, которые пользователь не может переназначить и отключить функцию переназначения для каждого InputAction
, InputGroup
или InputMap
.
При обновлении учитывайте следующие исключения:
Неподдерживаемые конфигурации
Переназначение ввода отключается, если не выполняются следующие условия:
Действие
InputAction
, использующее несколько ключей, должно состоять из ключа-модификатора и ключа-немодификатора. Например,Шифт + А действителен, ноА + Б ,Ctrl + Альт , иShift + А + Tab является недействительным.Два или более объектов
InputAction
илиInputGroup
не могут использовать один и тот же уникальный идентификатор.
Знакомство с Входным Контекстом
InputContext
позволяет игре использовать одну и ту же клавишу для разных действий в игре без конфликтов. Таким образом, если игра использует пространство для прыжков во время игры и для подтверждения выбора в меню, игроки смогут индивидуально переназначать
На следующей диаграмме последовательности показано, как API setInputContext()
работает во время выполнения:
Обновление
Игры, использующие предыдущие реализации Input SDK, по-прежнему поддерживают базовое переназначение, если только они не используют неподдерживаемую конфигурацию . Если в вашей игре используется более старая версия Input SDK, прочтите руководство по обновлению с 0.0.4 до 1.0.0-бета .
Обновление до бета-версии 1.1.1 открывает новые функции, в том числе:
- Запуск изменений контекста.
- Получение уведомлений о событиях сопоставления клавиш
- Отключение переназначения для каждого действия, группы, контекста или карты.
Установка
Плагин Unity v1.1.1-beta доступен для вашего использования. Вам необходимо удалить все предыдущие версии Input SDK, установленные в вашей игре, и обновиться до текущей версии.
Чтобы добавить бета-версию Input SDK v1.1.1 в игру, см. раздел Добавление SDK .
Определите статические поля
Для версии 1.1.1-бета рекомендуется определить ваши 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
Обновите свои действия ввода
Метод InputAction.create()
1.0.0-beta
устарел. InputAction
имеет идентификатор версии и может быть помечен как переназначаемый или нет. InputAction
определенный с помощью метода create()
входного SDK 1.0.0-beta
по умолчанию переназначается и не содержит информации о версии:
InputAction во входном SDK 1.0.0-бета
var driveAction = PlayInputAction.Create(
"Drive",
(long)InputEventIds.DRIVE,
PlayInputControls.Create(
new[] { AndroidKeyCode.KEYCODE_SPACE },
new List<PlayMouseAction>()
)
);
InputAction во входном SDK 1.1.1-бета
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 во входном SDK 1.1.1-бета (со строкой версии)
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
);
Дополнительные сведения об управлении версиями привязок клавиш см. в разделе Отслеживание идентификаторов клавиш .
Обновите свои группы ввода
В 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()
1.0.0-beta
устарел. Вы должны обновить свою InputGroup
в своей игре, указав идентификатор версии и логическое значение, указывающее, можно ли переназначать объекты InputAction
в ваших группах. Группы, созданные с помощью устаревшего метода create()
входного SDK 1.0.0-beta
допускают переназначение, имеют идентификатор 0, а идентификатор версии представляет собой пустую строку ( ""
):
InputGroup в Input SDK 1.0.0-бета
var gameInputGroup = PlayInputGroup.Create(
"Road controls",
new List<PlayInputAction>
{
driveAction,
turboAction,
openGarageAction,
openPgsAction,
openStoreAction
}
);
InputGroup в Input SDK 1.1.1-бета
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-бета (со строкой версии)
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.create()
1.0.0-beta
устарел. Обновите свой InputMap
, чтобы присвоить идентификатор версии, полностью отказаться от функции переназначения или назначить список зарезервированных ключей для вашей игры, которые вы не хотите использовать для переназначения пользователем. Каждая InputMap
определенная с помощью метода create()
входного SDK 1.0.0-beta
по умолчанию допускает переназначение, идентифицируется с идентификатором 0
и не имеет зарезервированных ключей.
InputMap в Input SDK 1.0.0-бета
var gameInputMap = PlayInputMap.Create(
new List<PlayInputGroup>
{
gameInputGroup,
menuInputGroup
},
PlayMouseSettings.Create(false, false)
);
InputMap в Input SDK 1.1.1-бета
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, назначив разные элементы управления для разных сцен с помощью InputContexts
или обновив пользовательский интерфейс вашей игры, получив уведомления о переназначении событий с помощью InputRemappingListeners
.
При обновлении привязок клавиш ознакомьтесь с рекомендациями по разработке привязок клавиш и учтите ограничения функции переназначения.