Uaktualnij pakiet SDK do wprowadzania danych dla Javy i Kotlin do wersji 1.1

Z tego przewodnika dowiesz się, jak zaktualizować grę z wersji beta 1.0.0 Wejściowy pakiet SDK dla Javy i Kotlin do wersji 1.1.0-beta. Zobacz Przewodnik po uaktualnieniu Unity dla Unity lub szczegółowych instrukcji.

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ę, wybranie elementów sterujących, 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 każdego użytkownika, są trwałe podczas sesji gry. Dane 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 kontrolne nie są zachowywane w wielu miejscach Komputery PC.

Nie musisz uaktualniać pakietu SDK danych wejściowych, aby włączyć ponowne mapowanie kluczy gry, ale możesz wyłączyć funkcję ponownego mapowania, jeśli wykryto nieobsługiwaną konfigurację.

Jeśli chcesz kontrolować proces ponownego mapowania danych wejściowych lub jest wyłączona w Twojej grze, wykonaj te czynności, by rozwiązać ten problem:

  • 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 ustawić wyłączoną 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óżnymi scenami gry, dodaj wywołań zwrotnych, aby nasłuchiwać zdarzeń ponownego mapowania, zdefiniować zbiór zarezerwowanych kluczy, które użytkownik nie może zmienić mapowania ani dezaktywować funkcji ponownego mapowania na InputAction, InputGroup lub InputMap.

Podczas uaktualniania pakietu SDK do nowej wersji 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:

  • Funkcja InputAction wykorzystująca wiele kluczy musi zawierać modyfikator i niemodyfikatorowi. Na przykład Shift + A jest prawidłowy, ale A + B, Ctrl + Alt oraz Shift + A + Tab to nie opcje.

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

Uaktualnij

Wejściowy pakiet SDK w wersji 1.1.0-beta jest zgodny wstecznie z pakietem SDK wejścia 1.0.0-beta. Gry, które korzystają z wcześniejszych implementacji pakietu SDK wejścia nadal obsługują podstawowe ponowne mapowanie, chyba że używają nieobsługiwana konfiguracja. Jeśli gra korzysta z pakietu Wejściowa wersja SDK, zapoznaj się z przewodnika po uaktualnieniu z wersji 0.0.4 do wersji 1.0.0-beta.

Po przejściu na wersję beta 1.1.0 zyskujesz dostęp do nowych funkcji, takich jak:

Uaktualnij zależność

Jeśli do importowania pakietu SDK danych wejściowych używasz Gradle, uaktualnij pakiet do najnowszej wersji:

// build.gradle
dependencies {
   ...
   implementation 'com.google.android.libraries.play.games:inputmapping:1.1.0-beta'
   ...
}

Zdefiniuj pola statyczne

W przypadku wersji 1.1.0-beta warto zdefiniować pole InputAction, InputGroup, InputContext i InputMap obiekty jako pola statyczne obiektu Klasa InputMappingProvider, ponieważ te pola są dostępne z innych części Twojej aplikacji:

Kotlin

class InputSDKProvider : InputMappingProvider {
    override fun onProvideInputMap(): InputMap { return gameInputMap }

    companion object {
        const val INPUTMAP_VERSION = "1.0.0"

        private val moveUpInputAction = InputAction.create(...)
        private val movementInputGroup = InputGroup.create(...)
        val menuContext = InputContext.create(...)
        val gameInputMap = InputMap.create(...)
    }
}

Java

public class MyInputMappingProvider implements InputMappingProvider {
    private static final String INPUTMAP_VERSION = "1.0.0";

    private static final InputAction moveUpInputAction =
        InputAction.create(...);
    private static final InputGroup movementInputGroup = InputGroup.create(...);
    public static final InputContext menuContext = InputContext.create(...);
    public static final InputMap gameInputMap = InputMap.create(...);

    @Override
    public InputMap onProvideInputMap() {
        return gameInputMap;
    }
}

Zaktualizuj wprowadzone działania

Metoda InputAction.create() pakietu SDK wejściowego 1.0.0-beta to wycofane. Element InputAction ma teraz 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)

Kotlin

val jumpInputAction = InputAction.create(
    "Jump",
    InputEventIds.JUMP.id,
    InputControls.create(
        listOf(KeyEvent.KEYCODE_SPACE),
        emptyList()
    )
)

Java

InputAction moveUpInputAction = InputAction.create(
    "Move Up",
    InputEventIds.MOVE_UP.ordinal(),
    InputControls.create(
        Collections.singletonList(KeyEvent.KEYCODE_W),
        Collections.emptyList()
    )
);

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

Kotlin

companion object {
  private val moveUpInputAction = InputAction.create(
    "Move Up",
    InputActionsIds.DRIVE.ordinal.toLong(),
    InputControls.create(listOf(KeyEvent.KEYCODE_W), emptyList()),
    InputEnums.REMAP_OPTION_ENABLED) // This action is remappable
}

Java

private static final InputAction moveUpInputAction = InputAction.create(
    "Move Up",
    InputEventIds.MOVE_UP.ordinal(),
    InputControls.create(
            Collections.singletonList(KeyEvent.KEYCODE_W),
            Collections.emptyList()),
    InputEnums.REMAP_OPTION_ENABLED // this action is remappable
);

Dane wejściowe działania w pakiecie SDK danych wejściowych w wersji 1.1.0 beta (z ciągiem znaków wersji)

Kotlin

private val enterMenuInputAction = InputAction.create(
    "Enter menu",
    InputControls.create(listOf(KeyEvent.KEYCODE_ENTER), emptyList()),
    InputIdentifier.create(
    INPUTMAP_VERSION, InputActionsIds.ENTER_MENU.ordinal.toLong()),
    InputEnums.REMAP_OPTION_ENABLED
)

Java

private static final InputAction moveUpInputAction = InputAction.create(
    "Move Up",
    InputControls.create(
            Collections.singletonList(KeyEvent.KEYCODE_W),
            Collections.emptyList()),
    InputIdentifier.create(
            INPUTMAP_VERSION,
            InputEventIds.MOVE_UP.ordinal()),
    InputEnums.REMAP_OPTION_ENABLED // this action is remappable
);

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

Zaktualizuj grupy wejściowe

W pakiecie SDK danych 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. W ten sam sposób, w jaki 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:

Kotlin

enum class 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
}

Java

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ściowego (tak 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 zmapować i mieć 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)

Kotlin

val movementInputGroup = InputGroup.create(
    "Basic Movement",
    listOf(
        moveUpInputAction,
        moveLeftInputAction,
        moveDownInputAction,
        moveRightInputAction,
        jumpInputAction,
        runInputAction)
)

Java

InputGroup movementInputGroup = InputGroup.create(
    "Basic movement",
    Arrays.asList(
        moveUpInputAction,
        moveLeftInputAction,
        moveDownInputAction,
        moveRightInputAction,
        jumpInputAction,
        runInputAction
    )
);

Wejściowa grupa w pakiecie SDK do wprowadzania danych w wersji 1.1.0 (beta)

Kotlin

companion object {
    private val movementInputGroup = InputGroup.create(
        "Basic movement",
        listOf(
            moveUpInputAction,
            moveLeftInputAction,
            moveDownInputAction,
            moveRightInputAction,
            jumpInputAction,
            runInputAction),
        InputGroupsIds.BASIC_MOVEMENT.ordinal.toLong(),
        // All the actions in this groups can't be remapped
        InputEnums.REMAP_OPTION_DISABLED
    )
}

Java

private static final InputGroup movementInputGroup = InputGroup.create(
    "Basic movement",
    Arrays.asList(
            moveUpInputAction,
            moveLeftInputAction,
            moveDownInputAction,
            moveRightInputAction,
            jumpInputAction,
            runInputAction
    ),
    InputGroupsIds.BASIC_MOVEMENT.ordinal(),
    // All the actions in this groups can't be remapped
    InputEnums.REMAP_OPTION_DISABLED
);

Wejściowa grupa w pakiecie SDK danych wejściowych w wersji 1.1.0-beta (z ciągiem znaków wersji)

Kotlin

companion object {
    private val movementInputGroup  = InputGroup.create(
        "Basic movement",
        listOf(
            moveUpInputAction,
            moveLeftInputAction,
            moveDownInputAction,
            moveRightInputAction,
            jumpInputAction,
            runInputAction),
        InputIdentifier.create(
            INPUTMAP_VERSION, InputGroupsIds.BASIC_MOVEMENT.ordinal.toLong()),
        // All the actions in this groups can't be remapped
        InputEnums.REMAP_OPTION_DISABLED
    )
}

Java

private static final InputGroup movementInputGroup = InputGroup.create(
    "Basic movement",
    Arrays.asList(
            moveUpInputAction,
            moveLeftInputAction,
            moveDownInputAction,
            moveRightInputAction,
            jumpInputAction,
            runInputAction
    ),
    InputIdentifier.create(
            INPUTMAP_VERSION,
            InputGroupsIds.BASIC_MOVEMENT.ordinal()),
    // All the actions in this groups can't be remapped
    InputEnums.REMAP_OPTION_DISABLED
);

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 to 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,

Kotlin

val gameInputMap = InputMap.create(
    listOf(movementInputGroup, mouseMovementInputGroup),
    MouseSettings.create(true, false)
)

Java

InputMap gameInputMap = InputMap.create(
    Arrays.asList(movementInputGroup, mouseMovementInputGroup),
    MouseSettings.create(true, false)
);

wejściowego pakietu SDK w wersji 1.1.0 beta,

Kotlin

companion object {

  const val INPUTMAP_VERSION = "1.0.0"
  const val INPUT_MAP_ID = 0

  val gameInputMap = InputMap.create(
    listOf(movementInputGroup, mouseMovementInputGroup),
    MouseSettings.create(true, false),
    InputIdentifier.create(INPUTMAP_VERSION, INPUT_MAP_ID.toLong()),
    InputEnums.REMAP_OPTION_ENABLED,
    // Use ESCAPE as reserved key
    listof(InputControls.create(listOf(KeyEvent.KEYCODE_ESCAPE), emptyList()))
  )
}

Java


public static final String INPUT_MAP_VERSION = "1.0.0-beta";
public static final long INPUT_MAP_ID = 0;

public static final InputMap gameInputMap = InputMap.create(
        Arrays.asList(movementInputGroup, mouseMovementInputGroup),
        MouseSettings.create(true, false),
        InputIdentifier.create(INPUTMAP_VERSION, INPUT_MAP_ID),
        InputEnums.REMAP_OPTION_ENABLED,
        // Use ESC key as reserved key
        Arrays.asList(
                InputControls.create(
                        Collections.singletonList(KeyEvent.KEYCODE_ESCAPE),
                        Collections.emptyList()
                )
        )
);

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.