Uaktualnienie pakietu wejściowego SDK dla Unity do wersji 1.1

Z tego przewodnika dowiesz się, jak zaktualizować pakiet SDK do wprowadzania danych w wersji 1.0 w Unity. Aby wyświetlić instrukcje dotyczące Javy i Kotlin, kliknij tutaj.

Informacje o wersji

Gry Google Play na PC obsługują ponowne mapowanie sterowania klawiaturą na podstawie powiązań klawiszy w grze za pomocą pakietu wejściowego SDK.

Użytkownicy mogą uzyskać dostęp do tej funkcji, otwierając nakładkę, wybierając elementy sterujące, a następnie klikając działanie, które chcesz zmapować.

Gry Google Play na PC mapują wszystkie odpowiednio zmapowane przez użytkownika dane wejściowe w grze. Dzięki temu gra nie musi wiedzieć o zmianie mapowania gracza. Jeśli chcesz znać nowe dane wejściowe dla działania w grze, na przykład wyświetlić elementy sterujące klawiaturą w grze, możesz opcjonalnie zarejestrować wywołanie zwrotne, aby otrzymać powiadomienie o zmianie wydarzeń.

Gry Google Play na PC przechowują odpowiednio zmapowane elementy sterujące użytkownika, aby można było z nich korzystać podczas wszystkich sesji gier. Te ustawienia są przechowywane lokalnie, więc nie mają wpływu na działanie urządzeń mobilnych i są usuwane po odinstalowaniu Gier Google Play na PC. Ustawienia nie są spójne na wielu urządzeniach PC.

Nie musisz uaktualniać pakietu wejściowego SDK, aby włączyć w grze mapowanie klawiszy. Jeśli jednak wykryjemy nieobsługiwaną konfigurację, w grze mapowanie zostanie wyłączone.

Jeśli chcesz kontrolować sposób mapowania danych wejściowych lub wyłączyć funkcję mapowania w Twojej grze, wykonaj te czynności:

  • Uaktualnij pakiet SDK do wprowadzania danych 1.1.0-beta.
  • Zaktualizuj wszystkie powiązania kluczy, aby uniknąć nieobsługiwanych konfiguracji.
  • Zaktualizuj InputMap, aby włączyć włączoną funkcję ponownego mapowania.

Jeśli chcesz zrezygnować z funkcji mapowania klawiszy w grze, a jednocześnie nadal wyświetlać wersję tylko do odczytu powiązań klawiszy, wykonaj te czynności:

  • Uaktualnij pakiet SDK do wprowadzania danych 1.1.0-beta.
  • Zaktualizuj urządzenie InputMap, aby wyłączyć funkcję mapowania.

Możesz uaktualnić wersję pakietu SDK do wprowadzania danych do wersji 1.1.0-beta, aby korzystać z zaawansowanych funkcji mapowania w Grach Google Play na PC. Możesz użyć parametru InputContexts, aby zdefiniować elementy sterujące różnymi scenami w grze, dodać wywołania zwrotne w celu wykrywania zdarzeń zmiany zmapowanego, zdefiniować zestaw zarezerwowanych kluczy, do których użytkownik nie może przypisywać zmian, i wyłączyć funkcję ponownego mapowania w InputAction, InputGroup lub InputMap.

Podczas uaktualniania weź pod uwagę te wyjątki:

Nieobsługiwane konfiguracje

Mapowanie danych wejściowych jest wyłączone, jeśli nie są spełnione te warunki:

  • InputAction, który korzysta z wielu kluczy, musi składać się z klucza modyfikującego i niemodyfikacyjnego. Na przykład kombinacja Shift + A jest prawidłowa, ale A + B, Ctrl + Alt i Shift + A + Tab jest nieprawidłowa.

  • Co najmniej 2 obiekty InputAction lub InputGroup nie mogą mieć tego samego unikalnego identyfikatora.

Przedstawiamy informacje o tym rodzaju

InputContext umożliwia używanie tego samego klucza do różnych działań w grze bez konfliktów. Dzięki temu, jeśli w grze jest miejsce na skakanie i trzeba potwierdzić wybór menu, gracze mogą odpowiednio zmienić spację na wejściowe w menu oraz spację na strzałkę w górę podczas rozgrywki.

Ten diagram sekwencji pokazuje, jak interfejs setInputContext() API działa w środowisku wykonawczym:

Diagram przedstawiający przepływ danych wejściowych pakietu SDK podczas mapowania klawiszy.

Przejdź na Gemini Advanced

Gry korzystające z wcześniejszych implementacji pakietu SDK do wprowadzania danych nadal obsługują podstawowe mapowanie, chyba że używają nieobsługiwanej konfiguracji. Jeśli Twoja gra korzysta ze starszej wersji pakietu wejściowego SDK, przeczytaj przewodnik uaktualnienia z wersji 0.0.4 do 1.0.0 w wersji beta.

Przejście na wersję 1.1.0 w wersji beta włącza nowe funkcje, w tym:

  • Wywoływanie zmian kontekstu.
  • Otrzymywanie powiadomień o kluczowych zdarzeniach mapowania
  • Wyłączam ponowne mapowanie dla akcji, grupy, kontekstu lub mapy.

Instalacja

Możesz użyć wtyczki Unity w wersji 1.1.0-beta. Musisz usunąć wszystkie wcześniejsze wersje pakietu wejściowego SDK zainstalowanego w grze i zaktualizować go do aktualnej wersji.

Aby dodać do gry pakiet wejściowego pakietu SDK w wersji 1.1.0-beta, przeczytaj sekcję o dodawaniu pakietu SDK.

Zdefiniuj pola statyczne

W przypadku wersji 1.1.0 (beta) dobrze jest zdefiniować pola InputActions, InputGroups, InputContexts i InputMap jako statyczne pola klasy InputMappingProvider, ponieważ będą one dostępne w innych częściach aplikacji:

#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

Zaktualizuj swoje działania wejściowe

InputAction

Metoda InputAction.create() w pakiecie SDK do wprowadzania danych 1.0.0-beta została wycofana. Element InputAction ma identyfikator wersji i może być oznaczony jako możliwy do powielania lub nie. Element InputAction zdefiniowany za pomocą metody 1.0.0-beta create() z pakietu wejściowego SDK jest domyślnie możliwy do ponownego przypisania i nie zawiera informacji o wersji:

Akcja wprowadzanie w pakiecie SDK do wprowadzania danych w wersji 1.0.0-beta

var driveAction = PlayInputAction.Create(
    "Drive",
    (long)InputEventIds.DRIVE,
    PlayInputControls.Create(
        new[] { AndroidKeyCode.KEYCODE_SPACE },
        new List<PlayMouseAction>()
    )
);

Działanie wejściowe w pakiecie SDK do wprowadzania danych w wersji 1.1.0-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
);

Działanie wejściowe funkcji w pakiecie SDK w wersji 1.1.0-beta (z ciągiem znaków wersji)

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
);

Więcej informacji o obsłudze wersji powiązań kluczy znajdziesz w artykule Identyfikatory kluczy śledzenia.

Zaktualizuj grupy wejściowe

We wejściowym pakiecie SDK 1.1.0-beta musisz jednoznacznie identyfikować każdy element (InputGroup). Każdy element InputAction należy do InputGroup, czyli zbioru powiązanych działań. Poprawia to nawigację i wykrywalność elementów sterujących podczas rozgrywki. Tak jak InputAction musi mieć unikalny identyfikator wśród wszystkich działań w jednym elemencie InputContext, tak InputGroup musi mieć unikalny identyfikator we wszystkich istniejących grupach.

W przykładach z tej sekcji gra zawiera 2 obiekty InputContext reprezentujące menu główne i rozgrywkę. Odpowiednie identyfikatory są śledzone dla każdego elementu InputGroup w tych kontekstach za pomocą tego wyliczenia:

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
}

Tak jak w przypadku InputAction, metoda InputGroup.create() w pakiecie SDK do wprowadzania danych 1.0.0-beta została wycofana. Musisz zaktualizować InputGroup w grze, podając identyfikator wersji i wartość logiczna wskazującą, czy obiekty InputAction w grupach można wykorzystać ponownie. Grupy utworzone za pomocą wycofanej metody create() pakietu wejściowego 1.0.0-beta z pakietu SDK można przypisać ponownie. Grupy te mają identyfikator 0, a identyfikator wersji jest pustym ciągiem znaków (""):

Grupa wejściowa w pakiecie SDK do wprowadzania danych w wersji 1.0.0 beta

var gameInputGroup = PlayInputGroup.Create(
    "Road controls",
    new List<PlayInputAction>
    {
        driveAction,
        turboAction,
        openGarageAction,
        openPgsAction,
        openStoreAction
    }
);

Grupa wejściowa w pakiecie SDK do wprowadzania danych w wersji beta 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
);

Grupa wejściowa w pakiecie SDK do wprowadzania danych w wersji 1.1.0-beta (z ciągiem znaków wersji)

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
);

Więcej informacji o obsłudze wersji powiązań kluczy znajdziesz w artykule Identyfikatory kluczy śledzenia.

Aktualizowanie mapy wejściowej

Metoda InputMap.create() w pakiecie SDK 1.0.0-beta została wycofana. Zaktualizuj urządzenie InputMap, aby przypisać identyfikator wersji, zrezygnuj całkowicie z funkcji mapowania lub przypisz listę zarezerwowanych kluczy do gry, których użytkownik nie ma używać do ponownego mapowania. Każdy element InputMap określony za pomocą metody wejściowego pakietu SDK 1.0.0-beta create() jest domyślnie możliwy do ponownego przypisania, jest identyfikowany za pomocą identyfikatora 0 i nie ma żadnych zarezerwowanych kluczy.

Identyfikator wejściowy w pakiecie SDK wejściowym w wersji 1.0.0-beta

var gameInputMap = PlayInputMap.Create(
    new List<PlayInputGroup>
    {
        gameInputGroup,
        menuInputGroup
    },
    PlayMouseSettings.Create(false, false)
);

Mapa wprowadzania w pakiecie SDK wejściowym w wersji 1.1.0-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()
);

Co dalej

Przejdź na wersję 1.1.0 w wersji beta, przypisując różne elementy sterujące do różnych scen za pomocą InputContexts lub aktualizując interfejs gry za pomocą opcji Otrzymywanie powiadomień o zmianie mapowania zdarzeń w aplikacji InputRemappingListeners.

Podczas aktualizowania powiązań kluczy zapoznaj się ze sprawdzonymi metodami ich projektowania oraz weź pod uwagę ograniczenia i ograniczenia funkcji mapowania.