Uaktualnienie pakietu wejściowego SDK dla Unity do wersji 1.1

Z tego przewodnika dowiesz się, jak zaktualizować grę z pakietu SDK 1.0 na Unity. Kliknij tutaj instrukcji dotyczących Javy i Kotlina.

Informacje o wersji

Gry Google Play na PC obsługują przemapowanie sterowania za pomocą klawiatury na powiązaniach kluczy, które dostarcza gra za pomocą pakietu SDK danych wejściowych.

Aby uzyskać dostęp do tej funkcji, należy otworzyć nakładkę, wybierając ustawienia. a potem kliknij działanie, którego przypisanie chcesz zmienić.

Gry Google Play na PC mapują wszystkie dane wprowadzone przez użytkownika na domyślne ustawienia gry dane wejściowe. Dzięki temu gra nie musi pamiętać o mapowaniu graczy. Jeśli musisz znać nowy typ danych wejściowych dla działania w grze. Na przykład sterowanie za pomocą klawiatury możesz opcjonalnie zarejestrować wywołanie zwrotne powiadomienia o ponownym mapowaniu zdarzeń.

Gry Google Play na PC zapisują lokalnie przeniesione elementy sterujące użytkownika. w przypadku różnych sesji gier. Te ustawienia są przechowywane lokalnie, więc nie są wpływają na wygodę korzystania z urządzenia mobilnego i są usuwane po odinstalowaniu Gier Google Play na PC. Ustawienia nie są zachowywane na wielu komputerach.

Nie musisz uaktualniać pakietu SDK danych wejściowych, aby włączyć ponowne mapowanie kluczy gry, ale ponowne mapowanie będzie wyłączone, jeśli wykryto nieobsługiwaną konfigurację.

Jeśli chcesz kontrolować działanie funkcji ponownego mapowania danych wejściowych lub funkcji ponownego mapowania danych wejściowych Usługa jest wyłączona w Twojej grze, wykonaj te czynności:

  • Uaktualnij pakiet SDK do wejścia 1.1.0-beta.
  • Zaktualizuj powiązania klawiszy, aby uniknąć nieobsługiwane konfiguracje.
  • Zaktualizuj urządzenie InputMap, aby włączyć funkcję ponownego mapowania.

Jeśli chcesz zrezygnować z funkcji ponownego mapowania gry, jeśli wyświetlasz wersję powiązań kluczy tylko do odczytu, wykonaj te czynności:

  • Uaktualnij pakiet SDK do wejścia 1.1.0-beta.
  • Zaktualizuj urządzenie InputMap, aby wyłączyć funkcję ponownego mapowania.

Możesz uaktualnić swoją wersję pakietu SDK wejścia do wersji 1.1.0-beta, możesz korzystać z zaawansowanych funkcji ponownego mapowania w Grach Google Play na PC przy użyciu InputContexts, aby określić elementy sterujące różnych scen w grze, dodaj wywołań zwrotnych, aby nasłuchiwać zdarzeń ponownego mapowania, zdefiniować zbiór zarezerwowanych kluczy, które użytkownik nie może zmienić mapowania i wyłączyć funkcji ponownego mapowania na InputAction, InputGroup lub InputMap.

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

Nieobsługiwane konfiguracje

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

  • Element InputAction, który używa wielu klawiszy, musi zawierać modyfikator i niemodyfikatorowi. Na przykład Shift + A jest prawidłowy, ale A + B, Ctrl + Alt oraz Shift + A + Tab są nieprawidłowe.

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

Przedstawiamy elementinputContext

InputContext pozwala grze używać tego samego klucza w różnych działaniach bez zakłóceń. Dzięki temu, jeśli gra wykorzystuje miejsce do skakania, podczas rozgrywki, a także w celu potwierdzenia wyboru menu, pojedynczo zmieniać położenie spacji w menu na wpisywanie spacja na strzałkę w górę podczas rozgrywki.

Poniższy diagram sekwencji pokazuje, jak działa interfejs API setInputContext(). środowisko wykonawcze:

Diagram przedstawiający przepływ pakietu SDK wejściowego podczas ponownego mapowania klawiszy.

Uaktualnij

Gry, które korzystały z wcześniejszych implementacji pakietu SDK wejścia, nadal będą obsługiwać tę funkcję. podstawowego mapowania, chyba że funkcja nieobsługiwana konfiguracja. Jeśli gra korzysta z starszej wersji pakietu SDK wejścia, zapoznaj się z przewodnika po uaktualnieniu z wersji 0.0.4 do wersji 1.0.0-beta.

Uaktualnienie do wersji 1.1.0 beta umożliwia korzystanie z nowych funkcji, takich jak:

  • Wywoływanie zmian kontekstu.
  • Otrzymywanie powiadomień o kluczowych zdarzeniach mapowania
  • Wyłączenie ponownego mapowania akcji, grupy, kontekstu lub mapy.

Instalacja

Możesz użyć wtyczki Unity w wersji 1.1.0-beta. Musisz usunąć wszystkie starszych wersji pakietu SDK wejścia, zainstalowanych w grze i aktualizacji bieżącej wersji.

Aby dodać do gry pakiet SDK wejściowych w wersji 1.1.0 (beta), zapoznaj się z artykułem Dodaję pakiet SDK.

Zdefiniuj pola statyczne

W wersji 1.1.0-beta warto zdefiniować InputActions, InputGroups, InputContexts i InputMap jako pola statyczne InputMappingProvider, ponieważ te pola będą dostępne z innych źródeł części 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 wprowadzone działania

Metoda InputAction.create() pakietu SDK wejściowego 1.0.0-beta to wycofane. Element InputAction ma identyfikator wersji i można go oznaczyć jako lub nie. InputAction zdefiniowany za pomocą wejściowego pakietu SDK Metoda 1.0.0-beta create() jest domyślnie wykorzystywana ponownie i nie ma obsługi wersji informacje:

Wejściowe działanie w pakiecie SDK wejścia w wersji 1.0.0 (beta)

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

Wejściowe działanie w pakiecie SDK wejścia 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
);

Wejściowe działanie w pakiecie SDK danych wejściowych 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

W pakiecie SDK wejściowych 1.1.0-beta musisz jednoznacznie zidentyfikować każdy InputGroup Każdy element InputAction należy do elementu InputGroup – zbioru powiązanych działań. Ułatwi to nawigację i wykrywalność elementów sterujących. podczas rozgrywki. Tak samo jak InputAction musi mieć unikalny identyfikator wśród wszystkich działań w pojedynczym elemencie InputContext, InputGroup musi mieć unikalny identyfikator w istniejących grupach.

W przykładach w tej sekcji gra ma 2 obiekty InputContext które reprezentują menu główne i rozgrywkę. Przy każdym z nich śledzone są odpowiednie identyfikatory InputGroup w tych kontekstach przy użyciu następującego 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
}

Metoda InputGroup.create() pakietu SDK wejścia, tak samo jak InputAction Usługa 1.0.0-beta została wycofana. Musisz zaktualizować: InputGroup w grze z identyfikatorem wersji i wartością logiczną, która wskazuje, czy InputAction obiekty w grupach można mapować ponownie. Grupy utworzone za pomocą wycofanej metody pakietu SDK wejścia 1.0.0-beta create() można przypisywać ponownie i mają identyfikator 0. a identyfikator wersji jest pustym ciągiem znaków (""):

Wejściowa grupa 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
    }
);

Wejściowa grupa w pakiecie SDK do wprowadzania danych w wersji 1.1.0 (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
);

Wejściowa grupa w pakiecie SDK danych wejściowych 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.

Zaktualizuj Twoją mapę wejściową

Metoda InputMap.create() pakietu SDK wejściowego 1.0.0-beta została wycofane. Zaktualizuj urządzenie InputMap, aby przypisać identyfikator wersji; zrezygnuj całkowicie z funkcji ponownego mapowania lub przypisz listę zarezerwowanych kluczy która nie powinna być używana do ponownego mapowania. Co tydzień – InputMap zdefiniowane za pomocą metody 1.0.0-beta create() pakietu SDK wejściowego to domyślnie możliwy do ponownego przypisania, ma identyfikator 0 i nie ma żadnych zarezerwowane klucze.

wejściowego pakietu SDK w wersji 1.0.0 beta,

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

wejściowego pakietu SDK 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

Kontynuuj uaktualnianie wersji beta do wersji 1.1.0 do Przypisywanie różnych elementów sterujących do różnych scen za pomocą InputContexts lub aktualizując interfejs gry przez Otrzymywanie powiadomień o remapowaniu zdarzeń za pomocą InputRemappingListeners.

Podczas aktualizowania powiązań kluczy spójrz na Sprawdzone metody projektowania powiązań kluczy oraz wziąć pod uwagę ograniczenia ograniczenia funkcji ponownego mapowania.