Upgrade des Input SDK für Java und Kotlin auf Version 1.1 durchführen

In dieser Anleitung wird erläutert, wie Sie Ihr Spiel vom Input SDK 1.0.0-beta für Java und Kotlin auf 1.1.1-beta aktualisieren. Eine Unity -spezifische Anleitung finden Sie im Unity-Upgrade-Leitfaden.

Versionshinweise

Google Play Games auf dem PC unterstützt die Neuzuordnung von Tastatursteuerungen basierend auf den Tastenzuweisungen, die Ihr Spiel mit dem Input SDK bereitstellt.

Nutzer können auf diese Funktion zugreifen, indem sie das Overlay öffnen, „Steuerungen“ auswählen und dann auf die Aktion klicken, die sie neu zuordnen möchten.

Google Play Games auf dem PC ordnet jede vom Nutzer neu zugeordnete Eingabe der Standardeingabe Ihres Spiels zu. So muss Ihr Spiel nicht über die Neuzuordnung des Spielers informiert sein. Wenn Sie die neue Eingabe für eine In-Game-Aktion kennen müssen, z. B. um die Tastatursteuerungen in Ihrem Spiel anzuzeigen, können Sie optional einen Callback registrieren, um über Neuzuordnungsereignisse benachrichtigt zu werden.

Google Play Games auf dem PC speichert die neu zugeordneten Steuerungen jedes Nutzers lokal, sodass sie für alle Spielsitzungen beibehalten werden. Da diese Daten lokal gespeichert werden, hat dies keine Auswirkungen auf die mobile Nutzung und sie werden bei der Deinstallation von Google Play Games auf dem PC gelöscht. Die Steuerungseinstellungen werden nicht auf mehreren PCs beibehalten.

Sie müssen das Input SDK nicht aktualisieren, um die Neuzuordnung von Tasten in Ihrem Spiel zu aktivieren. Die Neuzuordnung kann jedoch für Ihr Spiel deaktiviert werden, wenn eine nicht unterstützte Konfiguration erkannt wird.

Wenn Sie die Neuzuordnung von Eingaben steuern möchten oder die Neuzuordnungsfunktion für Ihr Spiel deaktiviert ist, führen Sie die folgenden Schritte aus, um das Problem zu beheben:

  • Führen Sie ein Upgrade auf das Input SDK 1.1.1-beta durch.
  • Aktualisieren Sie alle Tastenzuweisungen, um die nicht unterstützten Konfigurationen zu vermeiden.
  • Aktualisieren Sie Ihre InputMap, um die Neuzuordnungsfunktion zu aktivieren.

Wenn Sie die Neuzuordnungsfunktion für Ihr Spiel deaktivieren, aber weiterhin die schreibgeschützte Version Ihrer Tastenzuweisungen anzeigen möchten, führen Sie die folgenden Schritte aus:

  • Führen Sie ein Upgrade auf das Input SDK 1.1.1-beta durch.
  • Aktualisieren Sie Ihre InputMap, um die Neuzuordnungsfunktion zu deaktivieren.

Sie können ein Upgrade Ihrer Version des Input SDK auf 1.1.1-beta durchführen, um erweiterte Neuzuordnungsfunktionen in Google Play Games auf dem PC zu nutzen. Dazu können Sie InputContexts verwenden, um Steuerungen für verschiedene Szenen Ihres Spiels zu definieren, Callbacks hinzufügen, um auf Neuzuordnungsereignisse zu warten, eine Reihe reservierter Tasten definieren, die der Nutzer nicht neu zuordnen kann, und die Neuzuordnungsfunktion pro InputAction, InputGroup oder InputMap deaktivieren.

Beachten Sie beim Upgrade auf die neue SDK-Version die folgenden Ausnahmen:

Nicht unterstützte Konfigurationen

Die Neuzuordnung von Eingaben ist deaktiviert, wenn die folgenden Bedingungen nicht erfüllt sind:

  • Eine InputAction, die mehrere Tasten verwendet, muss aus einer Modifikator- und einer Nicht-Modifikator-Taste bestehen. „Umschalt + A“ ist beispielsweise gültig, „A + B“ „Strg + Alt“ und „Umschalt + A + Tab“ jedoch nicht.

  • Zwei oder mehr InputAction- oder InputGroup-Objekte dürfen nicht dieselbe eindeutige ID haben.

Upgrade

Das Input SDK 1.1.1-beta ist abwärtskompatibel mit dem Input SDK 1.0.0-beta. Spiele, die frühere Implementierungen des Input SDK verwenden, unterstützen weiterhin die grundlegende Neuzuordnung, es sei denn, sie verwenden eine nicht unterstützte Konfiguration. Wenn Ihr Spiel eine frühere Version des Input SDK verwendet, lesen Sie den Upgrade-Leitfaden von 0.0.4 auf 1.0.0-beta.

Durch das Upgrade auf 1.1.1-beta werden neue Funktionen aktiviert, darunter:

Abhängigkeit aktualisieren

Wenn Sie Gradle verwenden, um das Input SDK zu importieren, führen Sie ein Upgrade auf die neueste Version durch:

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

Statische Felder definieren

Für Version 1.1.1-beta empfiehlt es sich, die Objekte InputAction, InputGroup, InputContext und InputMap als statische Felder der Klasse InputMappingProvider zu definieren, da diese Felder von anderen Teilen Ihrer Anwendung aus zugänglich sind:

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

InputActions aktualisieren

Die Methode InputAction.create() des Input SDK 1.0.0-beta ist veraltet. Eine InputAction hat jetzt eine Versions-ID und kann als neu zuordnungsfähig oder nicht neu zuordnungsfähig markiert werden. Eine InputAction, die mit der Methode create() des Input SDK 1.0.0-beta definiert wurde, ist standardmäßig neu zuordnungsfähig und enthält keine Versionsinformationen:

InputAction im Input SDK 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 im Input SDK 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 im Input SDK 1.1.1-beta (mit Versionsstring)

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

Weitere Informationen zur Versionsverwaltung Ihrer Tastenzuweisungen finden Sie unter Schlüssel-IDs verfolgen.

InputGroups aktualisieren

Im Input SDK 1.1.1-beta müssen Sie jede InputGroup eindeutig identifizieren. Jede InputAction gehört zu einer InputGroup, einer Sammlung verwandter Aktionen. Dadurch werden die Navigation und die Auffindbarkeit der Steuerungen während des Spiels verbessert. So wie InputAction eine eindeutige ID unter allen Aktionen in einem einzelnen InputContext haben muss, muss auch InputGroup eine eindeutige ID unter den vorhandenen Gruppen haben.

In den Beispielen in diesem Abschnitt hat ein Spiel zwei InputContext-Objekte, die das Hauptmenü und das Gameplay darstellen. Für jede InputGroup in diesen Kontexten werden mit der folgenden Aufzählung geeignete IDs verfolgt:

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
}

Wie InputAction ist auch die Methode InputGroup.create() des Input SDK 1.0.0-beta veraltet. Sie müssen Ihre InputGroup in Ihrem Spiel mit einer Versions-ID und einem booleschen Wert aktualisieren, der angibt, ob die InputAction-Objekte in Ihren Gruppen neu zuordnungsfähig sind. Mit der veralteten Methode 1.0.0-beta create() des Input SDK erstellte Gruppen sind neu zuordnungsfähig, haben die ID 0, und die Versions-ID ist ein leerer String (""):

InputGroup im Input SDK 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 im Input SDK 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 im Input SDK 1.1.1-beta (mit Versionsstring)

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

Weitere Informationen zur Versionsverwaltung Ihrer Tastenzuweisungen finden Sie unter Schlüssel-IDs verfolgen.

InputMap aktualisieren

Die Methode InputMap.create() des Input SDK 1.0.0-beta ist veraltet. Aktualisieren Sie Ihre InputMap, um eine Versions-ID zuzuweisen, die Neuzuordnungsfunktion vollständig zu deaktivieren oder eine Liste reservierter Tasten für Ihr Spiel zuzuweisen, die der Nutzer nicht für die Neuzuordnung verwenden soll. Jede InputMap definiert mit der Methode create() des Input SDK 1.0.0-beta ist standardmäßig neu zuordnungsfähig, wird mit der ID 0 identifiziert und hat keine reservierten Tasten.

InputMap im Input SDK 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 im Input SDK 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()
                )
        )
);

Nächste Schritte

Setzen Sie das Upgrade auf 1.1.1-beta fort, indem Sie verschiedene Steuerungen für verschiedene Szenen zuweisen mit InputContexts oder die UI Ihres Spiels aktualisieren, indem Sie Benachrichtigungen über Neuzuordnungsereignisse erhalten mit InputRemappingListeners.

Beachten Sie beim Aktualisieren Ihrer Tastenzuweisungen die Best Practices für das Entwerfen von Tastenzuweisungen und die Einschränkungen und Beschränkungen der Neuzuordnungsfunktion.