Z tego przewodnika dowiesz się, jak przenieść grę na platformie Unity, aby korzystać z najnowszego pakietu SDK do obsługi danych wejściowych. Pakiet SDK w wersji 1.0.0-beta zawiera istotne ulepszenia w porównaniu z poprzednią wersją testową 0.0.4. Migrację z wcześniejszych wersji zapoznawczych należy przeprowadzić jak najszybciej. Pakiet SDK w wersji 0.0.4 będzie działać do marca 2023 r.
Aktualizowanie odwołań
Klasy otrzymały prefiks Play, aby uniknąć kolizji nazw z Unity.
Gdy zobaczysz komunikat o błędzie podobny do tego:
error CS0246: Nie można odnaleźć typu lub nazwy przestrzeni nazw „InputMappingProvider” (czy brakuje dyrektywy using lub odwołania do zestawu?)
musisz dodać prefiks Play do nazwy klasy. Na przykład InputMappingProvider zmieni się na PlayInputMappingProvider.
Aktualizowanie każdego elementu InputAction
InputAction jest teraz tworzony przez wywołanie PlayInputAction.Create, a nie przez utworzenie nowego struct z polami nazwanymi.
Znajdź kod wywołujący new InputAction:
var driveAction = new InputAction
{
ActionLabel = "Drive",
UniqueId = (int)InputEventIds.DRIVE,
InputControls = new InputControls
{
AndroidKeycodes = new[] { AndroidKeyCode.KEYCODE_SPACE }
}
};
Zastąp go połączeniem z numerem PlayInputAction.Create:
var driveAction = PlayInputAction.Create(
"Drive",
(int)InputEventIds.DRIVE,
PlayInputControls.Create(
new[] { AndroidKeyCode.KEYCODE_SPACE },
null
)
);
Zaktualizuj każdą grupę InputGroup
Podobnie jak w przypadku InputAction, InputGroup ma teraz PlayInputGroup.Create połączenie, zamiast wymagać ręcznego wypełniania struct.
Oznacza to, że musisz znaleźć wszystkie połączenia z numerem new InputGroup:
var gameInputGroup = new InputGroup
{
GroupLabel = "Game controls",
InputActions = new List<InputAction>
{
driveAction,
turboAction,
openGarageAction,
openStoreAction
}
};
i zastąp ją połączeniem z numerem 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 tworzyć nową strukturę.
Znajdź połączenia na numer new InputMap:
return new InputMap
{
InputGroups = new List<InputGroup>
{
gameInputGroup,
menuInputGroup
},
MouseSettings = new MouseSettings
{
AllowMouseSensitivityAdjustment = false,
InvertMouseMovement = false
}
};
Zastąp go połączeniem z numerem PlayInputMap.Create:
return PlayInputMap.Create(
new List<PlayInputGroup>
{
gameInputGroup,
menuInputGroup
},
PlayMouseSettings.Create(false, false)
);
Zmiana nazw metod PlayInputMappingClient
RegisterInputMappingProvider w przypadku PlayInputMappingClient zostało zmienione na SetInputMappingProvider.
Wyszukaj połączenia na numer RegisterInputMappingProvider:
Input.GetInputMappingClient().RegisterInputMappingProvider(_inputMappingProvider);
Zastąp je wywołaniem funkcji SetInputMappingProvider:
PlayInputMappingClient inputMappingClient =
Google.Play.InputMapping.PlayInput.GetInputMappingClient();
inputMappingClient.SetInputMappingProvider(_inputMapProvider);
UnregisterInputMappingProvider zmieniła też nazwę na ClearInputMappingProvider i nie wymaga już zarejestrowanego wcześniej parametru InputMappingProvider.
Znajdź połączenia na numer UnregisterInputMappingProvider:
Input.GetInputMappingClient().UnregisterInputMappingProvider(_inputMapProvider);
Zastąp je tymi znakami: ClearInputMappingProvider
PlayInput.GetInputMappingClient().ClearInputMappingProvider();