Input SDK for Unity auf Version 1.1 aktualisieren

In diesem Leitfaden erfahren Sie, wie Sie für Unity ein Upgrade Ihres Spiels vom Input SDK 1.0 auf das Input SDK 1.1 durchführen. Hier finden Sie Anleitungen für Java und Kotlin.

Versionshinweise

Google Play Spiele auf dem PC unterstützt die Neuzuordnung der Tastatursteuerung basierend auf den Tastenkombinationen, die Ihr Spiel über das Input SDK bereitstellt.

Nutzer rufen diese Funktion auf, 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 vom Nutzer neu zugeordnete Eingabe dem Standardeingabefeld Ihres Spiels zu. So muss Ihr Spiel nicht über die Neuzuordnung des Spielers informiert werden. Wenn du die neue Eingabe für eine In-Game-Aktion wie die Anzeige der Tastatursteuerung in deinem Spiel wissen musst, kannst du optional einen Callback registrieren, der über die Neuzuordnung von Ereignissen benachrichtigt wird.

In Google Play Spiele auf dem PC werden die neu zugewiesenen Steuerelemente der Nutzer lokal gespeichert, damit sie über mehrere Spielsitzungen hinweg erhalten bleiben. Da diese Einstellungen lokal gespeichert werden, haben sie keine Auswirkungen auf die mobile Nutzung und werden gelöscht, wenn Google Play Spiele auf dem PC deinstalliert wird. Die Einstellungen werden nicht auf mehreren PCs gespeichert.

Sie müssen das Input SDK nicht aktualisieren, um die Tastenzuordnung in Ihrem Spiel zu aktivieren. Die Tastenzuordnung wird jedoch für Ihr Spiel deaktiviert, wenn eine nicht unterstützte Konfiguration erkannt wird.

Wenn Sie die Eingabeumwandlung steuern möchten oder die Funktion für Ihr Spiel deaktiviert ist, gehen Sie so vor:

Wenn Sie die Neuzuordnungsfunktion für Ihr Spiel deaktivieren, aber die schreibgeschützte Version Ihrer Tastenkombinationen weiterhin anzeigen lassen möchten, gehen Sie so vor:

  • Führen Sie ein Upgrade auf das Eingabe-SDK 1.1.1-beta durch.
  • Aktualisieren Sie InputMap, um die Funktion zum Neuzuordnen zu deaktivieren.

Sie können Ihre Version des Input SDK auf 1.1.1-beta aktualisieren, um die erweiterten Funktionen zur Tastenbelegung 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 Tastenbelegungsereignisse zu warten, eine Reihe reservierter Tasten zu definieren, die der Nutzer nicht neu zuordnen kann, und die Tastenbelegungsfunktion gemäß InputAction, InputGroup oder InputMap zu deaktivieren.

Beachten Sie beim Upgrade die folgenden Ausnahmen:

Nicht unterstützte Konfigurationen

Die Eingabeumleitung ist deaktiviert, wenn folgende Bedingungen nicht erfüllt sind:

  • Eine InputAction, die mehrere Tasten verwendet, muss aus einer Modifikatortaste und einer anderen Taste bestehen. Umschalttaste + A ist beispielsweise gültig, aber A + B, Strg + Alt und Umschalttaste + A + Tab sind ungültig.

  • Mindestens zwei InputAction- oder InputGroup-Objekte können nicht dieselbe eindeutige ID haben.

Jetzt neu: InputContext

Mit einer InputContext kann in einem Spiel derselbe Schlüssel für verschiedene Aktionen verwendet werden, ohne dass es zu Konflikten kommt. Wenn in einem Spiel die Leertaste zum Springen und zum Bestätigen einer Menüauswahl verwendet wird, können Spieler die Leertaste in Menüs individuell auf die Eingabetaste und während des Spiels auf den Aufwärtspfeil umlegen.

Das folgende Sequenzdiagramm zeigt, wie die setInputContext() API zur Laufzeit funktioniert:

Diagramm zum Ablauf des Eingabe-SDKs beim Neuzuordnen von Tasten

Upgrade

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 in Ihrem Spiel eine ältere Version des Input SDK verwendet wird, lesen Sie den Leitfaden zum Upgrade von 0.0.4 auf 1.0.0-Beta.

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

  • Kontextänderungen auslösen
  • Benachrichtigungen zu Tastenzuordnungsereignissen erhalten
  • Neuzuordnung nach Aktion, Gruppe, Kontext oder Karte deaktivieren

Installation

Das Unity-Plug-in Version 1.1.1-Beta steht zur Verfügung. Sie müssen alle vorherigen Versionen des Input SDK, die in Ihrem Spiel installiert sind, löschen und ein Upgrade auf die aktuelle Version durchführen.

Weitere Informationen zum Hinzufügen des Input SDK v1.1.1-Beta zu Ihrem Spiel finden Sie unter SDK hinzufügen.

Statische Felder definieren

Für Version 1.1.1-Beta empfiehlt es sich, InputActions, InputGroups, InputContexts und InputMap als statische Felder Ihrer InputMappingProvider-Klasse zu definieren, da diese Felder in anderen Teilen Ihrer Anwendung zugänglich sind:

#if PLAY_GAMES_PC
using Java.Lang;
using Java.Util;
using Google.Android.Libraries.Play.Games.Inputmapping;
using Google.Android.Libraries.Play.Games.Inputmapping.Datamodel;

public class InputSDKMappingProvider : InputMappingProviderCallbackHelper
{
    public static readonly string INPUT_MAP_VERSION = "1.0.0";

    private static readonly InputAction driveInputAction =
            InputAction.Create(...);
    private static readonly InputGroup roadInputGroup = InputGroup.Create(...);
    public static readonly InputContext roadControlsContext =
            InputContext.Create(...);
    public static readonly InputMap inputMap = InputMap.Create(...);

    public override InputMap OnProvideInputMap()
    {
        return inputMap;
    }
}
#endif

InputActions aktualisieren

Die Methode InputAction.create() des Input SDK 1.0.0-beta ist veraltet. Ein InputAction hat eine Versionskennung und kann als ummappebar oder nicht ummappebar gekennzeichnet werden. Ein InputAction, das mit der Input SDK-Methode 1.0.0-beta create() definiert wurde, kann standardmäßig neu zugeordnet werden und enthält keine Versionsinformationen:

InputAction im Input SDK 1.0.0-Beta

var driveAction = PlayInputAction.Create(
    "Drive",
    (long)InputEventIds.DRIVE,
    PlayInputControls.Create(
        new[] { AndroidKeyCode.KEYCODE_SPACE },
        new List<PlayMouseAction>()
    )
);

InputAction im Input SDK 1.1.1-Beta

private static readonly InputAction driveInputAction = InputAction.Create(
    "Drive",
    (long)InputEventIds.DRIVE,
    InputControls.Create(
        new[] { new Integer(AndroidKeyCode.KEYCODE_SPACE) }.ToJavaList(),
        new ArrayList<Integer>()),
    InputEnums.REMAP_OPTION_ENABLED
);

InputAction im Input SDK 1.1.1-Beta (mit Versionsstring)

private static readonly InputAction driveInputAction = InputAction.Create(
    "Drive",
    InputControls.Create(
        new[] { new Integer(AndroidKeyCode.KEYCODE_SPACE) }.ToJavaList(),
        new ArrayList<Integer>()),
    InputIdentifier.Create(
        INPUT_MAP_VERSION, (long)InputEventIds.DRIVE),
    InputEnums.REMAP_OPTION_ENABLED
);

Weitere Informationen zur Versionsverwaltung für Schlüsselbindungen finden Sie unter Schlüssel-IDs verfolgen.

InputGroups aktualisieren

Im Input-SDK 1.1.1-beta müssen Sie jeden InputGroup eindeutig identifizieren. Jedes InputAction gehört zu einem InputGroup, einer Gruppe ähnlicher Aktionen. Dadurch werden die Navigation und die Sichtbarkeit der Steuerelemente während des Spiels verbessert. Genau wie eine InputAction eine eindeutige Kennung unter allen Aktionen in einer einzelnen InputContext haben muss, muss eine 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. In diesen Kontexten werden für jede InputGroup die entsprechenden IDs mithilfe der folgenden Aufzählung erfasst:

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 bei 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 anpassbar sind. Gruppen, die mit der verworfenen Methode 1.0.0-beta create() des Eingabe-SDK erstellt wurden, sind anpassbar, haben die ID 0 und die Versions-ID ist ein leerer String (""):

InputGroup im Input SDK 1.0.0-Beta

var gameInputGroup = PlayInputGroup.Create(
    "Road controls",
    new List<PlayInputAction>
    {
        driveAction,
        turboAction,
        openGarageAction,
        openPgsAction,
        openStoreAction
    }
);

InputGroup in Input SDK 1.1.1 (Beta)

private static readonly InputGroup roadInputGroup = InputGroup.Create(
    "Road controls",
    new[]
    {
        driveInputAction,
        turboInputAction,
        openGarageInputAction,
        openPgsInputAction,
        openStoreInputAction,
    }.ToJavaList(),
    (long)InputGroupsIds.ROAD_CONTROLS,
    // All input actions of this group will be remappable unless specified
    // the contrary by the individual input actions.
    InputEnums.REMAP_OPTION_ENABLED
);

InputGroup im Input SDK 1.1.1-beta (mit Versionsstring)

private static readonly InputGroup roadInputGroup = InputGroup.Create(
    "Road controls",
    new[]
    {
        driveInputAction,
        turboInputAction,
        openGarageInputAction,
        openPgsInputAction,
        openStoreInputAction,
    }.ToJavaList(),
    InputIdentifier.Create(
        INPUT_MAP_VERSION, (long)InputGroupsIds.ROAD_CONTROLS),
    // All input actions of this group will be remappable unless specified
    // the contrary by the individual input actions.
    InputEnums.REMAP_OPTION_ENABLED
);

Weitere Informationen zur Versionsverwaltung für Schlüsselbindungen finden Sie unter Schlüssel-IDs verfolgen.

InputMap aktualisieren

Die Methode InputMap.create() des Input SDK 1.0.0-beta wurde eingestellt. Aktualisieren Sie Ihre InputMap, um eine Versions-ID zuzuweisen, die Funktion zum Neuzuordnen vollständig zu deaktivieren oder Ihrem Spiel eine Liste reservierter Tasten zuzuweisen, die nicht vom Nutzer neu zugeordnet werden sollen. Alle InputMap, die mit der Input SDK-Methode 1.0.0-beta create() definiert sind, können standardmäßig neu zugeordnet werden, werden mit der ID 0 identifiziert und haben keine reservierten Schlüssel.

InputMap im Input SDK 1.0.0-Beta

var gameInputMap = PlayInputMap.Create(
    new List<PlayInputGroup>
    {
        gameInputGroup,
        menuInputGroup
    },
    PlayMouseSettings.Create(false, false)
);

InputMap im Input SDK 1.1.1-Beta


public static readonly string INPUT_MAP_VERSION = "1.0.0";
public static readonly long INPUT_MAP_ID = 0;

public static readonly InputMap inputMap = InputMap.Create(
    new[] { roadInputGroup, menuInputGroup }.ToJavaList(),
    MouseSettings.Create(false, false),
    InputIdentifier.Create(INPUT_MAP_VERSION, INPUT_MAP_ID),
    // Use ESC as reserved key
    InputEnums.REMAP_OPTION_ENABLED,
    new[]
    {
        InputControls.Create(new[]
        {
            new Integer(AndroidKeyCode.KEYCODE_ESCAPE)
        }.ToJavaList(),
        new ArrayList<Integer>())
    }.ToJavaList()
);

Nächste Schritte

Fahren Sie mit dem Upgrade auf 1.1.1-Beta fort, indem Sie mit InputContexts verschiedene Steuerelemente für verschiedene Szenen zuweisen oder die Benutzeroberfläche Ihres Spiels aktualisieren, indem Sie mit InputRemappingListeners benachrichtigt werden, wenn Ereignisse neu zugeordnet werden.

Beachten Sie beim Aktualisieren Ihrer Tastenkürzel die Best Practices für die Gestaltung von Tastenkürzeln und die Einschränkungen und Einschränkungen der Funktion zum Neuverknüpfen.