Migrieren Sie zum 1.0.0-beta Input SDK

In diesem Leitfaden wird beschrieben, wie Sie Ihr Unity-Spiel auf das neueste Input SDK umstellen. Das 1.0.0-beta SDK bietet erhebliche Verbesserungen gegenüber der vorherigen 0.0.4-Vorabversion. Sie sollten so bald wie möglich von den früheren Vorabversionen migrieren. Das SDK 0.0.4 funktioniert noch bis März 2023.

Referenzen aktualisieren

Klassen erhalten das Präfix Play, um Namenskonflikte mit Unity zu vermeiden. Wenn Sie eine Fehlermeldung wie die folgende sehen:

Fehler CS0246: Der Typ- oder Namespace-Name "InputMappingProvider" konnte nicht gefunden werden. Fehlen eine Verwendungsanweisung oder eine Assembly-Referenz?

Sie müssen dem Klassennamen das Präfix Play hinzufügen. Aus InputMappingProvider wird beispielsweise PlayInputMappingProvider.

Jede InputAction aktualisieren

InputAction wird jetzt mit einem Aufruf von PlayInputAction.Create erstellt, anstatt eine neue struct mit benannten Feldern zu erstellen.

Suchen Sie nach Code, der new InputAction aufruft:

var driveAction = new InputAction
{
    ActionLabel = "Drive",
    UniqueId = (int)InputEventIds.DRIVE,
    InputControls = new InputControls
    {
        AndroidKeycodes = new[] { AndroidKeyCode.KEYCODE_SPACE }
    }
};

Ersetzen Sie ihn durch einen Aufruf von PlayInputAction.Create:

var driveAction = PlayInputAction.Create(
    "Drive",
    (int)InputEventIds.DRIVE,
    PlayInputControls.Create(
        new[] { AndroidKeyCode.KEYCODE_SPACE },
        null
    )
);

Jede InputGroup aktualisieren

Ähnlich wie bei InputAction gibt es jetzt für InputGroup einen PlayInputGroup.Create-Aufruf, anstatt dass Sie manuell ein struct ausfüllen müssen.

Sie sollten also alle Aufrufe von new InputGroup finden:

var gameInputGroup = new InputGroup
{
    GroupLabel = "Game controls",
    InputActions = new List<InputAction>
    {
        driveAction,
        turboAction,
        openGarageAction,
        openStoreAction
    }
};

Ersetzen Sie es durch einen Aufruf von PlayInputGroup.Create:

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

InputMap aktualisieren

InputMap verwendet ebenfalls PlayInputMap.Create, anstatt eine neue Struktur zu erstellen.

Suchen Sie alle new InputMap-Aufrufe:

return new InputMap
{
    InputGroups = new List<InputGroup>
    {
        gameInputGroup,
        menuInputGroup
    },
    MouseSettings = new MouseSettings
    {
        AllowMouseSensitivityAdjustment = false,
        InvertMouseMovement = false
    }
};

Ersetzen Sie es durch einen Aufruf von PlayInputMap.Create:

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

PlayInputMappingClient-Methoden umbenennen

Für PlayInputMappingClient wurde RegisterInputMappingProvider in SetInputMappingProvider umbenannt.

So finden Sie Anrufe an RegisterInputMappingProvider:

Input.GetInputMappingClient().RegisterInputMappingProvider(_inputMappingProvider);

Ersetzen Sie sie durch einen Aufruf von SetInputMappingProvider:

PlayInputMappingClient inputMappingClient =
    Google.Play.InputMapping.PlayInput.GetInputMappingClient();
inputMappingClient.SetInputMappingProvider(_inputMapProvider);

UnregisterInputMappingProvider wurde in ClearInputMappingProvider umbenannt und erfordert nicht mehr den zuvor registrierten Parameter InputMappingProvider.

Anrufe an UnregisterInputMappingProvider finden:

Input.GetInputMappingClient().UnregisterInputMappingProvider(_inputMapProvider);

Ersetzen Sie sie durch ClearInputMappingProvider:

PlayInput.GetInputMappingClient().ClearInputMappingProvider();