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 istUmschalttaste + A gültig, aberA + B ,Strg + Alt undUmschalttaste + A + Tabulatortaste jedoch nicht.Zwei oder mehr
InputAction
- oderInputGroup
-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:
- Änderungen an Szenensteuerung auslösen
- Benachrichtigungen zu Schlüsselzuordnungsereignissen erhalten.
- Die Neuzuordnung pro Aktion, Gruppe, Kontext oder Karte wird deaktiviert.
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