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 für Java und Kotlin 1.0.0-beta auf Version 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 über das Input SDK bereitstellt.

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

Bei Google Play Games auf dem PC wird jede vom Nutzer neu zugewiesene Eingabe der Standardeingabe Ihres Spiels zugeordnet. So muss Ihr Spiel nicht über die Neubelegung des Spielers informiert sein. Wenn Sie die neue Eingabe für eine In-Game-Aktion benötigen, z. B. um die Tastatursteuerung in Ihrem Spiel anzuzeigen, können Sie optional einen Callback registrieren, um über Ereignisse zur Neuzuweisung benachrichtigt zu werden.

In Google Play Games auf dem PC werden die neu zugewiesenen Steuerelemente jedes Nutzers lokal gespeichert, sodass sie für alle Gaming-Sitzungen beibehalten werden. Da diese Daten lokal gespeichert werden, hat das keinen Einfluss auf die Nutzung auf Mobilgeräten. Sie werden gelöscht, wenn Google Play Games auf dem PC deinstalliert wird. Die Steuerungseinstellungen werden nicht auf mehreren PCs beibehalten.

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

Wenn Sie die Neuzuordnung der Eingabe 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 nicht unterstützte Konfigurationen zu vermeiden.
  • Aktualisieren Sie InputMap, um die Neuzuordnungsfunktion zu aktiviert festzulegen.

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

  • Führen Sie ein Upgrade auf das Input SDK 1.1.1-beta durch.
  • Aktualisieren Sie InputMap, um die Funktion zum Neubelegen von Tasten auf disabled zu setzen.

Sie können ein Upgrade auf die Version 1.1.1-beta des Input SDK durchführen, um erweiterte Funktionen für die Neubelegung von Tasten in Google Play Spiele für PC zu nutzen. Dazu verwenden Sie InputContexts, um Steuerelemente für verschiedene Szenen Ihres Spiels zu definieren, fügen Callbacks hinzu, um auf Ereignisse für die Neubelegung von Tasten zu reagieren, definieren eine Reihe reservierter Tasten, die der Nutzer nicht neu belegen kann, und deaktivieren die Funktion für die Neubelegung von Tasten über InputAction, InputGroup oder InputMap.

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 mit mehreren Tasten muss aus einer Modifikator- und einer Nicht-Modifikatortaste bestehen. Umschalttaste + A ist beispielsweise gültig, A + B, Strg + Alt und Umschalttaste + A + Tab jedoch nicht.

  • Zwei oder mehr InputAction- oder InputGroup-Objekte können nicht dieselbe eindeutige ID haben.

Upgrade

Input SDK 1.1.1-beta ist abwärtskompatibel mit Input SDK 1.0.0-beta. Spiele, die frühere Implementierungen des Input SDK verwenden, unterstützen weiterhin die grundlegende Neubelegung, sofern sie keine nicht unterstützte Konfiguration verwenden. Wenn in Ihrem Spiel eine frühere Version des Input SDK verwendet wird, sollten Sie sich den Upgrade-Leitfaden von 0.0.4 auf 1.0.0-beta ansehen.

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

Abhängigkeit aktualisieren

Wenn Sie Gradle zum Importieren des Input SDK verwenden, 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 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 ist veraltet. Ein InputAction hat jetzt eine Versions-ID und kann als „remappable“ oder „not remappable“ gekennzeichnet werden. Eine InputAction, die mit der Input SDK-Methode 1.0.0-beta create() definiert wird, ist standardmäßig neu zuordenbar 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 in 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 in 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 von Tastenzuweisungen finden Sie unter Schlüssel-IDs nachverfolgen.

InputGroups aktualisieren

Im Eingabe-SDK 1.1.1-beta müssen Sie jede InputGroup eindeutig identifizieren. Jede InputAction gehört zu einer InputGroup, einer Sammlung verwandter Aktionen. Dadurch wird die Navigation und Auffindbarkeit der Steuerelemente während des Spiels verbessert. So wie InputAction eine eindeutige ID unter allen Aktionen in einem einzelnen InputContext haben muss, muss ein InputGroup 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 Gameplay darstellen. Für jede InputGroup werden in diesen Kontexten geeignete IDs 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 Methode InputGroup.create() des Input SDK 1.0.0-beta eingestellt. Sie müssen InputGroup in Ihrem Spiel mit einer Versions-ID und einem booleschen Wert aktualisieren, der angibt, ob die InputAction-Objekte in Ihren Gruppen neu zugeordnet werden können. Gruppen, die mit der eingestellten Input SDK-Methode 1.0.0-beta create() erstellt wurden, können neu zugeordnet werden, 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 von Tastenzuweisungen finden Sie unter Schlüssel-IDs nachverfolgen.

InputMap aktualisieren

Die Methode InputMap.create() des Input SDK 1.0.0-beta ist veraltet. Aktualisieren Sie InputMap, um eine Versions-ID zuzuweisen, die Neuzuordnung vollständig zu deaktivieren oder eine Liste mit reservierten Tasten für Ihr Spiel zuzuweisen, die nicht für die Neuzuordnung durch den Nutzer verwendet werden sollen. Jede InputMap, die mit der Input SDK-Methode 1.0.0-beta create() definiert wird, 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 Version 1.1.1-beta fort, indem Sie verschiedene Steuerelemente für verschiedene Szenen zuweisen mit InputContexts oder die Benutzeroberfläche Ihres Spiels aktualisieren, indem Sie Benachrichtigungen zu Neuzuordnungsereignissen mit InputRemappingListeners erhalten.

Wenn Sie Ihre Tastenzuweisungen aktualisieren, sehen Sie sich die Best Practices für das Design von Tastenzuweisungen an und berücksichtigen Sie die Einschränkungen und Beschränkungen der Funktion zum Neubelegen von Tasten.