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

In diesem Leitfaden wird erläutert, wie Sie ein Upgrade für Ihr Spiel von der Betaversion 1.0.0 durchführen. Eingabe-SDK für Java und Kotlin in Beta 1.1.0. Weitere Informationen finden Sie in der Unity-Upgradeleitfaden für Unity spezifische Anweisungen.

Versionshinweise

Google Play Spiele auf dem PC unterstützt die Neuzuordnung von Tastatursteuerelementen für die Schlüsselbindungen, die Ihr Spiel mit dem Input SDK bereitstellt.

Nutzer greifen auf diese Funktion zu, indem sie Overlay, Auswahl der Steuerelemente und dann auf die Aktion klicken, die neu zugeordnet werden soll.

Google Play Spiele auf dem PC ordnet jede vom Nutzer neu zugeordnete Eingabe der Standardeinstellung deines Spiels zu Eingabe. Auf diese Weise muss Ihr Spiel die Neuzuordnungen des Spielers nicht erkennen. Wenn müssen Sie den neuen Input für eine In-Game-Aktion kennen, z. B. die Anzeige des über die Tastatur steuern, können Sie optional einen Callback registrieren, werden benachrichtigt, wenn Ereignisse neu zugeordnet werden.

Google Play Spiele auf dem PC speichert die neu zugeordneten Steuerelemente jedes Nutzers lokal, bleiben über alle Spielesitzungen hinweg erhalten. Da dies lokal gespeichert ist, haben Auswirkungen auf die mobile Nutzung und werden bei der Deinstallation von Google Play Spiele auf dem PC gelöscht. Einstellungseinstellungen werden nicht über mehrere PC-Geräten.

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

Wenn Sie die Eingabe- oder Neuzuordnung steuern möchten, 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 Eingabe-SDK 1.1.0-beta durch.
  • Aktualisieren Sie alle Tastenbelegungen, um den Fehler nicht unterstützten Konfigurationen.
  • Aktualisieren Sie InputMap, um die Funktion zur Neuzuordnung zu aktivieren.

Wenn Sie die Neuzuordnungsfunktion für Ihr Spiel deaktivieren möchten, um die schreibgeschützte Version Ihrer Schlüsselbindungen anzuzeigen, gehen Sie so vor:

  • Führen Sie ein Upgrade auf das Eingabe-SDK 1.1.0-beta durch.
  • Aktualisieren Sie InputMap, um die Neuzuordnungsfunktion auf deaktiviert zu setzen.

Sie können Ihre Version des Input SDK auf 1.1.0-beta aktualisieren, um erweiterte Neuzuordnungsfunktionen in Google Play Spiele auf dem PC nutzen, InputContexts zum Festlegen von Steuerelementen für verschiedene Szenen deines Spiels, füge Callbacks zum Warten auf Neuzuordnungsereignisse definieren einen Satz reservierter Schlüssel, die der Nutzer nicht neu zuordnen und die Neuzuordnungsfunktion per InputAction deaktivieren können, 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:

  • Ein InputAction mit mehreren Tasten muss aus einem Modifikator bestehen und der ohne Modifikatortaste. Zum Beispiel ist Umschalttaste + A gültig, aber A + B, Strg + Alt und Umschalttaste + A + Tabulatortaste jedoch nicht.

  • Zwei oder mehr InputAction- oder InputGroup-Objekte können nicht dasselbe sein eindeutige ID.

Upgrade

Input SDK 1.1.0-beta ist abwärtskompatibel mit Input SDK 1.0.0-beta. Spiele, die frühere Implementierungen des Input SDK verwenden unterstützen weiterhin einfache Neuzuordnungen, es sei denn, sie verwenden ein nicht unterstützte Konfiguration. Wenn Sie in Ihrem Spiel eine einer früheren Version des Input SDKs, finden Sie in der Upgradeleitfaden von 0.0.4 auf 1.0.0 Beta

Das Upgrade auf 1.1.0-Beta ermöglicht neue Funktionen, darunter:

Upgradeabhängigkeit

Wenn Sie das Input SDK mit Gradle 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

Für Version 1.1.0-beta empfiehlt es sich, die InputAction zu definieren, InputGroup-, InputContext- und InputMap-Objekte als statische Felder Ihres InputMappingProvider, da auf diese Felder von anderen Teilen aus zugegriffen werden kann. Ihrer Anwendung:

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 eingestellt. Ein InputAction hat jetzt eine Versions-ID und kann als anpassbar ist oder nicht. Ein InputAction, das mit dem Input SDK definiert wird Die Methode 1.0.0-beta create() ist standardmäßig anpassbar und hat keine Versionsverwaltung Informationen:

InputAction in 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.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 in 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 Ihrer Schlüsselbindungen finden Sie unter Tracking-Schlüssel-IDs:

InputGroups aktualisieren

Im Input SDK 1.1.0-beta musst du jedes einzelne InputGroup. Jede InputAction gehört zu einer InputGroup – einer Sammlung von Aktionen. Dadurch werden die Navigation und die Sichtbarkeit der Steuerelemente verbessert. während des Spiels. Ebenso muss InputAction eine eindeutige Kennung haben. unter allen Aktionen in einer einzelnen InputContext muss eine InputGroup eindeutigen ID für alle bestehenden Gruppen.

In den Beispielen in diesem Abschnitt hat ein Spiel zwei InputContext-Objekte für das Hauptmenü und das Gameplay. Es werden jeweils geeignete IDs erfasst. InputGroup in diesen Kontexten unter Verwendung der folgenden Aufzählung:

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, die InputGroup.create()-Methode des Input SDK 1.0.0-beta wurde verworfen. Du musst deine InputGroup in deinem Spiel aktualisieren durch eine Versionskennung und einen booleschen Wert, der angibt, InputAction Objekte in Ihren Gruppen anpassbar sind. Gruppen, die mit der eingestellten Eingabe-SDK-1.0.0-beta create()-Methode erstellt wurden, können geändert werden. Sie haben die ID 0, und die Versions-ID ein leerer String ist (""):

InputGroup in 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 in 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 Ihrer Schlüsselbindungen finden Sie unter Tracking-Schlüssel-IDs:

InputMap aktualisieren

Die Methode InputMap.create() des Eingabe-SDK 1.0.0-beta ist eingestellt. InputMap aktualisieren, um eine Versions-ID zuzuweisen, deaktivieren aus der Neuzuordnungsfunktion entfernen oder eine Liste reservierter Tasten für Ihr das der Nutzer nicht für Neuzuordnungen verwenden soll. Jeden InputMap die mit der Eingabe SDK-1.0.0-beta create()-Methode definiert ist, ist standardmäßig mit der ID 0 gekennzeichnet, enthält keine reservierten Schlüssel.

InputMap in 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 in 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

Setzen Sie das Upgrade auf 1.1.0-Beta fort, Verschiedene Steuerelemente für verschiedene Szenen zuweisen mit InputContexts oder aktualisiere die Benutzeroberfläche deines Spiels, indem du Benachrichtigungen zur Neuzuordnung von Ereignissen mit InputRemappingListeners

Sehen Sie sich beim Aktualisieren Ihrer Schlüsselbindungen die Best Practices für das Entwerfen von Schlüsselbindungen Beachten Sie dabei die Einschränkungen. Einschränkungen der Funktion zur Neuzuordnung