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

Z tego przewodnika dowiesz się, jak zaktualizować grę z wersji 1.0.0-beta pakietu Input SDK na Javę i Kotlin do wersji 1.1.1-beta. Instrukcje dotyczące Unity znajdziesz w przewodniku po uaktualnianiu Unity.

Informacje o wersji

Gry Google Play na PC obsługują zmianę przypisania klawiszy na podstawie przypisań klawiszy w grze, które są udostępniane za pomocą pakietu Input SDK.

Użytkownicy uzyskują dostęp do tej funkcji, otwierając nakładkę, wybierając elementy sterujące, a następnie klikając działanie, które chcą ponownie przypisać.

Gry Google Play na PC mapują wszystkie zmienione przez użytkownika dane wejściowe na domyślne dane wejściowe gry. Dzięki temu gra nie musi wiedzieć o zmianach przypisania przycisków przez gracza. Jeśli chcesz poznać nowe dane wejściowe dla działania w grze, np. wyświetlić w niej elementy sterujące klawiatury, możesz zarejestrować wywołanie zwrotne, aby otrzymywać powiadomienia o zdarzeniach ponownego mapowania.

Gry Google Play na PC przechowują lokalnie zmienione ustawienia sterowania każdego użytkownika, dzięki czemu są one zachowywane podczas kolejnych sesji. Ponieważ jest on przechowywany lokalnie, nie ma wpływu na wygodę użytkowników komórek i jest usuwany po odinstalowaniu Gier Google Play na PC. Ustawienia sterowania nie są zachowywane na wielu komputerach.

Aby włączyć w grze zmianę przypisania klawiszy, nie musisz uaktualniać pakietu Input SDK, ale zmiana przypisania może zostać wyłączona, jeśli zostanie wykryta nieobsługiwana konfiguracja.

Jeśli chcesz kontrolować ponowne mapowanie danych wejściowych lub jeśli funkcja ponownego mapowania jest wyłączona w Twojej grze, wykonaj te czynności, aby rozwiązać problem:

  • Uaktualnij pakiet Input SDK do wersji 1.1.1-beta.
  • Zaktualizuj wszystkie powiązania klawiszy, aby uniknąć nieobsługiwanych konfiguracji.
  • Zaktualizuj InputMap, aby włączyć funkcję ponownego mapowania.

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

  • Uaktualnij pakiet Input SDK do wersji 1.1.1-beta.
  • Zaktualizuj InputMap, aby ustawić funkcję ponownego mapowania na wyłączoną.

Możesz uaktualnić wersję pakietu Input SDK do wersji 1.1.1-beta, aby korzystać z zaawansowanych funkcji ponownego mapowania w Grach Play na PC. W tym celu użyj InputContexts, aby zdefiniować elementy sterujące dla różnych scen w grze, dodać wywołania zwrotne do nasłuchiwania zdarzeń ponownego mapowania, zdefiniować zestaw zarezerwowanych klawiszy, których użytkownik nie może ponownie mapować, i dezaktywować funkcję ponownego mapowania dla InputAction, InputGroup lub InputMap.

Podczas przechodzenia na nową wersję pakietu SDK weź pod uwagę te wyjątki:

Nieobsługiwane konfiguracje

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

  • InputAction, który wykorzystuje wiele klawiszy, musi składać się z klawisza modyfikującego i klawisza niemodyfikującego. Na przykład Shift + A jest prawidłowy, ale A + B, Ctrl + Alt i Shift + A + Tab nie są.

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

Uaktualnij

Pakiet Input SDK w wersji 1.1.1-beta jest wstecznie zgodny z pakietem Input SDK w wersji 1.0.0-beta. Gry korzystające z poprzednich implementacji pakietu SDK do obsługi danych wejściowych nadal obsługują podstawowe mapowanie, chyba że używają nieobsługiwanej konfiguracji. Jeśli Twoja gra korzysta ze starszej wersji pakietu SDK Input, zapoznaj się z przewodnikiem po aktualizacji z wersji 0.0.4 do wersji 1.0.0-beta.

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

Uaktualnianie zależności

Jeśli do importowania pakietu Input SDK używasz Gradle, zaktualizuj go do najnowszej wersji:

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

Definiowanie pól statycznych

W przypadku wersji 1.1.1-beta dobrym rozwiązaniem jest zdefiniowanie obiektów InputAction, InputGroup, InputContextInputMap jako statycznych pól klasy InputMappingProvider, ponieważ pola te są dostępne z innych części 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;
    }
}

Aktualizowanie InputActions

Metoda InputAction.create() pakietu Input SDK 1.0.0-beta została wycofana. InputAction ma teraz identyfikator wersji i może być oznaczony jako element, który można ponownie mapować, lub nie. InputAction zdefiniowany za pomocą metody Input SDK1.0.0-beta create() można domyślnie ponownie mapować i nie zawiera informacji o wersji:

InputAction w pakiecie Input SDK 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()
    )
);

InputAction w pakiecie Input SDK w wersji 1.1.1-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
);

InputAction w pakiecie Input SDK w wersji 1.1.1-beta (z ciągiem tekstowym 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 zarządzaniu wersjami powiązań klawiszy znajdziesz w artykule Śledzenie identyfikatorów kluczy.

Aktualizowanie grup wejściowych

W sekcji Input SDK 1.1.1-beta musisz jednoznacznie zidentyfikować każdy InputGroup. Każda InputAction należy do InputGroup – kolekcji powiązanych działań. Ułatwia to nawigację i zwiększa wykrywalność elementów sterujących podczas rozgrywki. Podobnie jak InputAction musi mieć unikalny identyfikator wśród wszystkich działań w ramach jednego InputContext, atrybut InputGroup musi mieć unikalny identyfikator w ramach istniejących grup.

W przykładach w tej sekcji gra ma 2 obiekty InputContext reprezentujące menu główne i rozgrywkę. W tych kontekstach śledzone są odpowiednie identyfikatory dla każdego InputGroup za pomocą tego 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
}

Podobnie jak w przypadku InputAction, metoda InputGroup.create() pakietu Input SDK1.0.0-beta została wycofana. Musisz zaktualizować InputGroup w grze, podając identyfikator wersji i wartość logiczną wskazującą, czy obiekty InputAction w grupach można ponownie mapować. Grupy utworzone za pomocą wycofanej metody Input SDK 1.0.0-beta create() można ponownie mapować, mają one identyfikator 0, a identyfikator wersji jest pustym ciągiem znaków (""):

InputGroup w pakiecie Input SDK 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
    )
);

InputGroup w pakiecie Input SDK w wersji 1.1.1-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
);

InputGroup w pakiecie Input SDK w wersji 1.1.1-beta (z ciągiem tekstowym 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 zarządzaniu wersjami powiązań klawiszy znajdziesz w artykule Śledzenie identyfikatorów kluczy.

Aktualizowanie InputMap

Metoda InputMap.create() w pakiecie Input SDK 1.0.0-beta została wycofana. Zaktualizuj InputMap, aby przypisać identyfikator wersji, całkowicie zrezygnować z funkcji ponownego mapowania lub przypisać listę zarezerwowanych klawiszy w grze, których użytkownik nie powinien używać do ponownego mapowania. Każdy InputMap zdefiniowany za pomocą metody Input SDK 1.0.0-beta create() jest domyślnie możliwy do ponownego mapowania, ma identyfikator 0 i nie ma żadnych zarezerwowanych klawiszy.

InputMap w pakiecie Input 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)
);

InputMap w pakiecie Input SDK w wersji 1.1.1-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 do wersji 1.1.1-beta, przypisując różne elementy sterujące do różnych scen za pomocą InputContexts lub aktualizując interfejs gry przez otrzymywanie powiadomień o zdarzeniach ponownego mapowania za pomocą InputRemappingListeners.

Podczas aktualizowania przypisań klawiszy zapoznaj się z najlepszymi praktykami projektowania przypisań klawiszy i weź pod uwagę ograniczenia oraz limity funkcji ponownego mapowania.