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-betadurch. - 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-betadurch. - 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
InputActionmit mehreren Tasten muss aus einer Modifikator- und einer Nicht-Modifikatortaste bestehen.Umschalttaste + A ist beispielsweise gültig,A + B ,Strg + Alt undUmschalttaste + A + Tab jedoch nicht.Zwei oder mehr
InputAction- oderInputGroup-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:
- Änderungen an der Szenensteuerung auslösen
- Benachrichtigungen zu Key-Mapping-Ereignissen erhalten
- Neuzuordnung pro Aktion, Gruppe, Kontext oder Karte deaktivieren
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.