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 undUmschalttaste + A + Tabulatortaste jedoch nicht.Mindestens zwei
InputAction
- oderInputGroup
-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:
- Auslösen von Szenensteuerungsänderungen
- Benachrichtigungen zu Schlüsselzuordnungsereignissen erhalten
- Neuzuordnung nach Aktion, Gruppe, Kontext oder Karte wird deaktiviert.
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.