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-betadurch. - 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-betadurch. - 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- oderInputGroup-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:
- Änderungen der Szenensteuerung auslösen.
- Benachrichtigungen über Tastenzuweisungsereignisse erhalten.
- Neuzuordnung pro Aktion, Gruppe, Kontext oder Map deaktivieren
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.