Обновите SDK ввода для Unity до версии 1.1.

В этом руководстве объясняется, как обновить игру с версии 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.0-beta .
  • Обновите свой InputMap , чтобы отключить функцию переназначения.

Вы можете обновить свою версию Input SDK до 1.1.0-beta чтобы воспользоваться преимуществами расширенных функций переназначения в Google Play Games на ПК, используя InputContexts для определения элементов управления для различных сцен вашей игры, добавления обратных вызовов для прослушивания событий переназначения, определения набор зарезервированных ключей, которые пользователь не может переназначить и отключить функцию переназначения для каждого InputAction , InputGroup или InputMap .

При обновлении учитывайте следующие исключения:

Неподдерживаемые конфигурации

Переназначение ввода отключается, если не выполняются следующие условия:

  • InputAction , использующее несколько ключей, должно состоять из ключа-модификатора и ключа-немодификатора. Например, Шифт + А действителен, но А + Б , Ctrl + Альт , и Shift + А + Tab является недействительным.

  • Два или более объектов InputAction или InputGroup не могут использовать один и тот же уникальный идентификатор.

Представляем Входной Контекст

InputContext позволяет игре использовать одну и ту же клавишу для разных действий в игре без конфликтов. Таким образом, если игра использует пространство для прыжков во время игры и для подтверждения выбора в меню, игроки смогут индивидуально переназначать космос к входить в меню и космос к стрелка вверх во время игры.

На следующей диаграмме последовательности показано, как API setInputContext() работает во время выполнения:

Диаграмма, показывающая работу входного SDK при переназначении ключей.

Обновление

Игры, использующие предыдущие реализации Input SDK, по-прежнему поддерживают базовое переназначение, если только они не используют неподдерживаемую конфигурацию . Если в вашей игре используется более старая версия Input SDK, прочтите руководство по обновлению с 0.0.4 до 1.0.0-бета .

Обновление до бета-версии 1.1.0 открывает новые функции, в том числе:

  • Запуск изменений контекста.
  • Получение уведомлений о событиях сопоставления клавиш
  • Отключение переназначения для каждого действия, группы, контекста или карты.

Установка

Плагин Unity v1.1.0-beta доступен для вашего использования. Вам необходимо удалить все предыдущие версии Input SDK, установленные в вашей игре, и обновиться до текущей версии.

Чтобы добавить в игру бета-версию Input SDK v1.1.0, см. раздел Добавление SDK .

Определите статические поля

Для бета-версии 1.1.0 рекомендуется определить ваши 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.0-бета

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.0-бета (со строкой версии)

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.0-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.0-бета

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.0-бета (со строкой версии)

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.0-бета


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.0, назначив разные элементы управления для разных сцен с помощью InputContexts или обновив пользовательский интерфейс вашей игры, получив уведомления о переназначении событий с помощью InputRemappingListeners .

При обновлении привязок клавиш ознакомьтесь с рекомендациями по разработке привязок клавиш и учтите ограничения и ограничения функции переназначения.