Przejdź na pakiet SDK do wprowadzania danych w wersji 1.0.0 w wersji beta

W tym przewodniku opisujemy, jak przeprowadzić migrację gry na platformie Unity, aby korzystała z najnowszego pakietu SDK Input. Pakiet SDK 1.0.0-beta zawiera znaczące ulepszenia w porównaniu z poprzednią wersją testową 0.0.4. Jak najszybciej przeprowadź migrację z wcześniejszych wersji testowych. Pakiet SDK 0.0.4 będzie działać do marca 2023 r.

Aktualizowanie odwołań

Do klas dodano prefiks Play, aby uniknąć konfliktów nazw z Unity. Gdy zobaczysz komunikat o błędzie podobny do tego:

error CS0246: The type or namespace name 'InputMappingProvider' could not be found (are you missing a using directive or an assembly reference?)

musisz dodać prefiks Play do nazwy klasy. Na przykład, InputMappingProvider zmieni się na PlayInputMappingProvider.

Aktualizowanie każdego elementu InputAction

InputAction jest teraz tworzony za pomocą wywołania PlayInputAction.Create, a nie przez utworzenie nowej struct z nazwanymi polami.

Znajdź kod, który wywołuje new InputAction:

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

Zastąp go wywołaniem PlayInputAction.Create:

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

Aktualizowanie każdej grupy InputGroup

Podobnie jak InputAction, InputGroup ma teraz wywołanie PlayInputGroup.Create, zamiast wymagać ręcznego wypełnienia struct.

Oznacza to, że musisz znaleźć wszystkie wywołania new InputGroup:

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

Zastąp je wywołaniem PlayInputGroup.Create:

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

Aktualizowanie mapy InputMap

InputMap też używa PlayInputMap.Create zamiast tworzenia nowej struktury.

Znajdź wszystkie wywołania new InputMap:

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

Zastąp je wywołaniem PlayInputMap.Create:

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

Zmiana nazw metod PlayInputMappingClient

W przypadku PlayInputMappingClient nazwa RegisterInputMappingProvider została zmieniona na SetInputMappingProvider.

Znajdź wszystkie wywołania RegisterInputMappingProvider:

Input.GetInputMappingClient().RegisterInputMappingProvider(_inputMappingProvider);

Zastąp je wywołaniem SetInputMappingProvider:

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

UnregisterInputMappingProvider została też zmieniona na ClearInputMappingProvider i nie wymaga już wcześniej zarejestrowanego InputMappingProvider jako parametru.

Znajdź wszystkie wywołania UnregisterInputMappingProvider:

Input.GetInputMappingClient().UnregisterInputMappingProvider(_inputMapProvider);

Zastąp je wywołaniem ClearInputMappingProvider:

PlayInput.GetInputMappingClient().ClearInputMappingProvider();