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 die Beta-Version 1.1.0 aktualisieren können. Eine Anleitung für Unity finden Sie im Unity-Upgradeleitfaden.

Versionshinweise

Google Play Spiele auf dem PC unterstützt die Neuzuordnung von Tastatursteuerelementen auf Grundlage der Tastenkombination, die dein Spiel mit dem Input SDK bereitstellt.

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

Google Play Spiele auf dem PC ordnet jede von Nutzern neu zugeordnete Eingabe der Standardeingabe des Spiels zu. So muss Ihr Spiel die Neuzuordnungen des Spielers nicht berücksichtigen. Wenn Sie die neue Eingabe für eine In-Game-Aktion kennen müssen, z. B. die Tastatursteuerung in Ihrem Spiel, können Sie optional einen Callback registrieren, der für Neuzuordnungen von Ereignissen benachrichtigt wird.

Bei Google Play Spiele auf dem PC werden die neu zugeordneten Steuerelemente eines Nutzers lokal gespeichert, damit sie für alle Spielesitzungen verfügbar sind. Da diese Daten lokal gespeichert werden, wirkt sie sich nicht auf die mobile Nutzung aus und wird bei der Deinstallation von Google Play Spiele auf dem PC gelöscht. Die Einstellungen der Steuerelemente werden nicht auf mehreren PCs gespeichert.

Sie müssen das Input SDK nicht aktualisieren, um die Schlüsselneuzuordnung in Ihrem Spiel zu aktivieren. Sie 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 Funktion für die Neuzuordnung 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.0-beta durch.
  • Aktualisieren Sie alle Tastaturbelegungen, um die nicht unterstützten Konfigurationen zu vermeiden.
  • Aktualisieren Sie die InputMap, um die Funktion für die Neuzuordnung zu aktiviert zu setzen.

Wenn Sie die Neuzuordnungsfunktion für Ihr Spiel deaktivieren, aber weiterhin die schreibgeschützte Version Ihrer Tastenkombinationen anzeigen lassen möchten, gehen Sie so vor:

  • Führen Sie ein Upgrade auf das Input SDK 1.1.0-beta durch.
  • Aktualisieren Sie die InputMap, um die Funktion für die Neuzuordnung zu deaktiviert.

Sie können Ihre Version des Input SDK auf 1.1.0-beta aktualisieren, um die erweiterten Funktionen zur Neuzuordnung in Google Play Spiele auf dem PC zu nutzen. Verwenden Sie dazu InputContexts, um Steuerelemente für verschiedene Szenen Ihres Spiels zu definieren, Callbacks hinzuzufügen, um auf Neuzuordnungsereignisse zu warten, einen Satz reservierter Schlüssel definieren, denen der Nutzer nicht neu zuordnen kann, und die Funktion für die Neuzuordnung per 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:

  • Ein InputAction mit mehreren Tasten muss aus einem Modifikatorschlüssel und einem Schlüssel ohne Modifizierer bestehen. Beispiel: Umschalttaste + A ist gültig, A + B, Strg + Alt und Umschalttaste + A + Tabulatortaste jedoch nicht.

  • Mindestens zwei InputAction- oder InputGroup-Objekte können nicht dieselbe eindeutige ID haben.

Upgrade holen

Input SDK 1.1.0-beta ist abwärtskompatibel mit Input SDK 1.0.0-beta. Spiele, die frühere Implementierungen des Input SDK nutzen, unterstützen weiterhin eine einfache Neuzuordnung, sofern sie keine nicht unterstützte Konfiguration verwenden. Wenn Ihr Spiel eine ältere Version des Input SDK verwendet, lesen Sie den Upgradeleitfaden von 0.0.4 auf 1.0.0-Beta.

Das Upgrade auf die Beta-Version 1.1.0 ermöglicht neue Funktionen wie die folgenden:

Upgrade-Abhängigkeit

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.0-beta'
   ...
}

Statische Felder definieren

Bei Version 1.1.0-beta empfiehlt es sich, die Objekte InputAction, InputGroup, InputContext und InputMap als statische Felder der Klasse InputMappingProvider zu definieren, da auf diese Felder von anderen Teilen der Anwendung aus zugegriffen werden kann:

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 wurde eingestellt. Ein InputAction hat jetzt eine Versionskennung und kann als wiederveränderbar markiert werden. Ein InputAction, das mit der create()-Methode 1.0.0-beta des Input SDK definiert wird, kann standardmäßig neu zugeordnet werden und enthält keine Informationen zur Versionsverwaltung:

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

InputAction im Input SDK 1.1.0-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 von Schlüsselbindungen finden Sie unter Tracking von Schlüssel-IDs.

InputGroups aktualisieren

Im Input SDK 1.1.0-beta müssen Sie jeden InputGroup eindeutig identifizieren. Jede InputAction gehört zu einer InputGroup – einer Sammlung verwandter Aktionen. Dies verbessert die Navigation und die Sichtbarkeit der Steuerelemente während des Spiels. Ebenso, wie InputAction unter allen Aktionen in einer einzelnen InputContext eine eindeutige Kennung haben muss, muss ein InputGroup-Objekt eine eindeutige ID für alle vorhandenen Gruppen haben.

In den Beispielen in diesem Abschnitt hat ein Spiel zwei InputContext-Objekte, die das Hauptmenü und das Spiel darstellen. Entsprechende IDs werden in diesen Kontexten für jede InputGroup mithilfe der folgenden Aufzählung erfasst:

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 wurde auch die InputGroup.create()-Methode des Input SDK 1.0.0-beta eingestellt. Sie müssen die InputGroup in Ihrem Spiel mit einer Versionskennung und einem booleschen Wert aktualisieren, der angibt, ob die InputAction-Objekte in Ihren Gruppen neu zugeordnet werden können. Gruppen, die mit der eingestellten Methode 1.0.0-beta create() des Input SDK erstellt wurden, können neu zugeordnet werden. Sie 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.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
);

InputGroup im Input SDK 1.1.0-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 von Schlüsselbindungen finden Sie unter Tracking von Schlüssel-IDs.

InputMap aktualisieren

Die Methode InputMap.create() des Input SDK 1.0.0-beta wurde eingestellt. Aktualisieren Sie InputMap, um eine Versions-ID zuzuweisen, deaktivieren Sie die Funktion für die Neuzuordnung vollständig oder weisen Sie eine Liste reservierter Schlüssel für Ihr Spiel zu, die nicht für die Neuzuordnung durch den Nutzer verwendet werden sollen. Jede InputMap, die mit der Methode 1.0.0-beta create() des Input SDK definiert wird, kann standardmäßig neu zugeordnet werden, wird mit der ID 0 identifiziert und hat keine reservierten Schlüssel.

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

Nächste Schritte

Fahren Sie mit dem Upgrade auf die Betaversion 1.1.0 fort. Dazu verwenden Sie InputContexts und verwenden InputContexts, um verschiedene Steuerelementen für verschiedene Szenen zuzuweisen, oder mit InputRemappingListeners Benachrichtigungen bei Neuzuordnungen von Ereignissen erhalten.

Sehen Sie sich zum Aktualisieren Ihrer Schlüsselbindungen die Best Practices für das Entwerfen von Schlüsselbindungen an und berücksichtigen Sie die Einschränkungen und Einschränkungen der Neuzuordnungsfunktion.