Input SDK for Unity auf Version 1.1 aktualisieren

In diesem Leitfaden wird erläutert, wie Sie für Ihr Spiel von 1.0 auf 1.1 Input SDK für Unity upgraden können. Eine Anleitung für Java und Kotlin finden Sie hier.

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 neu zugeordnet werden soll.

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.

Die neu zugeordneten Steuerelemente des Nutzers werden in Google Play Spiele auf dem PC lokal gespeichert, damit sie über mehrere Spielesitzungen hinweg bestehen bleiben. Da diese Einstellungen lokal gespeichert werden, haben sie keinen Einfluss auf die mobile Nutzung und werden bei der Deinstallation von Google Play Spiele auf dem PC gelöscht. Die Einstellungen bleiben für mehrere PC-Geräte nicht erhalten.

Sie müssen das Input SDK nicht aktualisieren, um die Neuzuordnung von Tasten in Ihrem Spiel zu aktivieren. Sie wird jedoch für Ihr Spiel deaktiviert, 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, gehen Sie so vor:

  • 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 das InputMap, um die Funktion für die Neuzuordnung als aktiviert festzulegen.

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 InputMap, um die Funktion für die Neuzuordnung zu deaktiviert.

Du kannst deine 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. Verwende InputContexts, um Steuerelemente für verschiedene Szenen deines Spiels zu definieren, Callbacks hinzuzufügen, um auf Neuzuordnungsereignisse zu warten, und 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 die folgenden Ausnahmen:

Nicht unterstützte Konfigurationen

Die Neuzuordnung von Eingaben ist deaktiviert, wenn die folgenden Bedingungen nicht erfüllt sind:

  • Ein InputAction, der mehrere Schlüssel verwendet, muss aus einem Modifikator- und einem Nichtmodifikatorschlüssel bestehen. Beispiel: Umschalttaste + A ist gültig, aber A + B, Strg + Alt und Umschalttaste + A + Tabulatortaste sind ungültig.

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

Jetzt neu: InputContext

Mit InputContext kann ein Spiel konfliktfrei denselben Schlüssel für verschiedene Aktionen in Ihrem Spiel verwenden. Wenn in einem Spiel während des Spiels Platz zum Springen und zum Bestätigen einer Menüauswahl vorhanden ist, können Spieler dann während des Spiels das Leerzeichen neu zuordnen, um in Menüs einzugeben, und das Leertaste in den Aufwärtspfeil.

Das folgende Sequenzdiagramm zeigt, wie die setInputContext() API während der Laufzeit funktioniert:

Diagramm, das den Ablauf des Input SDK bei der Neuzuordnung von Schlüsseln zeigt.

Upgrade holen

Spiele, in denen vorherige Implementierungen des Input SDK verwendet werden, unterstützen weiterhin die grundlegende Neuzuordnung, sofern sie keine nicht unterstützte Konfiguration verwenden. Wenn Sie in Ihrem Spiel eine ältere Version des Input SDK verwenden, lesen Sie den Upgradeleitfaden von 0.0.4 auf 1.0.0-Beta.

Ein Upgrade auf die Betaversion 1.1.0 ermöglicht neue Funktionen wie:

  • Kontextänderungen auslösen
  • Benachrichtigungen zu Schlüsselzuordnungsereignissen erhalten
  • Neuzuordnung nach Aktion, Gruppe, Kontext oder Karte wird deaktiviert.

Installation

Das Unity-Plug-in v1.1.0-beta ist jetzt verfügbar. Du musst alle früheren Versionen des in deinem Spiel installierten Input SDK löschen und auf die aktuelle Version aktualisieren.

Informationen zum Hinzufügen des Input SDK v1.1.0-beta zu deinem Spiel findest du unter SDK hinzufügen.

Statische Felder definieren

Bei Version 1.1.0-Beta empfiehlt es sich, die InputActions, InputGroups, InputContexts und InputMap als statische Felder der Klasse InputMappingProvider zu definieren, da diese Felder von anderen Teilen Ihrer Anwendung aus 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 wurde eingestellt. Ein InputAction hat 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

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

InputAction im Input SDK 1.1.0-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.0-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 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. So wie ein InputAction eine eindeutige Kennung für alle Aktionen in einer 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 Spiel darstellen. Entsprechende IDs werden in diesen Kontexten für jede InputGroup 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 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

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

InputGroup im Input SDK 1.1.0-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.0-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 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

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

InputMap im Input SDK 1.1.0-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 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.