Input SDK for Unity auf Version 1.1 aktualisieren

In dieser Anleitung wird beschrieben, wie Sie Ihr Spiel vom Input SDK für Unity 1.0 auf Version 1.1 aktualisieren. Hier finden Sie eine Anleitung für Java und Kotlin.

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, Steuerelemente 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 Neuzuordnung 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 Neuzuordnungsereignisse benachrichtigt zu werden.

In Google Play Games auf dem PC werden die neu zugewiesenen Steuerelemente des Nutzers lokal gespeichert, damit sie für alle Gaming-Sitzungen beibehalten werden. Da diese Einstellungen lokal gespeichert werden, haben sie keinen Einfluss auf die mobile Nutzung und werden bei der Deinstallation von Google Play Games auf dem PC gelöscht. Einstellungen werden nicht auf mehreren PCs beibehalten.

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

Wenn Sie die Neubelegung von Eingaben steuern möchten oder die Neubelegungsfunktion für Ihr Spiel deaktiviert ist, gehen Sie so vor:

Wenn Sie die Neubelegungsfunktion für Ihr Spiel deaktivieren, aber weiterhin die Version Ihrer Tastenbelegungen mit Lesezugriff anzeigen möchten, gehen Sie so vor:

  • Aktualisieren Sie auf das Input SDK 1.1.1-beta.
  • Aktualisieren Sie InputMap, um die Funktion zum Neuzuordnen von Tasten zu deaktivieren.

Sie können ein Upgrade auf Version 1.1.1-beta des Input SDK durchführen, um erweiterte Funktionen für die Neubelegung in Google Play Spiele für PC zu nutzen. Dazu verwenden Sie InputContexts, um Steuerelemente für verschiedene Szenen Ihres Spiels zu definieren, Callbacks hinzuzufügen, um auf Neubelegungsereignisse zu reagieren, eine Reihe reservierter Tasten zu definieren, die der Nutzer nicht neu belegen kann, und die Neubelegungsfunktion pro InputAction, InputGroup oder InputMap zu 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:

  • Eine InputAction, für die mehrere Tasten erforderlich sind, muss aus einer Modifikator- und einer Nicht-Modifikatortaste bestehen. Umschalttaste + A ist beispielsweise gültig, A + B, Strg + Alt und Umschalttaste + A + Tabulatortaste sind ungültig.

  • Zwei oder mehr InputAction- oder InputGroup-Objekte können nicht dieselbe eindeutige ID haben.

Einführung von InputContext

Mit einem InputContext kann ein Spiel denselben Schlüssel für verschiedene Aktionen verwenden, ohne dass es zu Konflikten kommt. Wenn in einem Spiel also die Leertaste für Sprünge während des Gameplays 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 Gameplays auf den Aufwärtspfeil umbelegen.

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

Diagramm zum Ablauf des Input SDK beim Neubelegen von Tasten.

Upgrade

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 ältere Version des Input SDK verwendet wird, sollten Sie sich den Upgrade-Leitfaden von Version 0.0.4 auf Version 1.0.0-beta ansehen.

Ein Upgrade auf Version 1.1.1-beta bietet neue Funktionen:

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

Installation

Das Unity-Plug-in v1.1.1-beta ist jetzt verfügbar. Sie müssen alle vorherigen Versionen des Input SDK löschen, die in Ihrem Spiel installiert sind, und auf die aktuelle Version aktualisieren.

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 der Klasse InputMappingProvider zu definieren, da diese Felder von anderen Teilen der 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 ist veraltet. Ein InputAction hat eine Versions-ID und kann als neu zuordnungsfähig oder nicht neu zuordnungsfähig gekennzeichnet werden. Eine InputAction, die mit der Input SDK-Methode 1.0.0-beta create() definiert wird, ist standardmäßig neu zuordnungsfähig 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 in 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 von Tastenzuweisungen finden Sie unter Schlüssel-IDs nachverfolgen.

InputGroups aktualisieren

Im Input SDK 1.1.1-beta müssen Sie jede InputGroup eindeutig identifizieren. Jede InputAction gehört zu einer InputGroup, einer Sammlung verwandter Aktionen. Das verbessert die Navigation und Auffindbarkeit der Steuerelemente während des Spiels. Genauso wie eine InputAction in einer einzelnen InputContext eine eindeutige Kennung für alle Aktionen 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. Für jedes InputGroup werden in diesen Kontexten geeignete IDs mit 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 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

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

InputGroup im 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 in 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 von Tastenzuweisungen finden Sie unter Schlüssel-IDs nachverfolgen.

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 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

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

Fahre mit dem Upgrade auf Version 1.1.1-beta fort, indem du verschiedene Steuerelemente für verschiedene Szenen zuweist mit InputContexts oder die Benutzeroberfläche deines Spiels aktualisierst, indem du Benachrichtigungen zu Neubelegungsereignissen mit InputRemappingListeners erhältst.

Wenn Sie Ihre Tastenzuweisungen aktualisieren, sehen Sie sich die Best Practices für das Entwerfen von Tastenzuweisungen an und berücksichtigen Sie die Einschränkungen und Beschränkungen der Funktion zum Neubelegen von Tasten.