Z tego przewodnika dowiesz się, jak zaktualizować grę z pakietu Input SDK w wersji 1.0 do wersji 1.1 na platformie Unity. Kliknij tutaj, aby wyświetlić instrukcje dotyczące języków Java i Kotlin.
Informacje o wersjach
Gry Google Play na PC obsługują zmianę przypisania klawiszy na podstawie przypisań klawiszy podanych przez grę za pomocą pakietu SDK do obsługi danych wejściowych.
Użytkownicy mogą uzyskać dostęp do tej funkcji, otwierając nakładkę, wybierając elementy sterujące, a następnie klikając działanie, które chcą ponownie przypisać.
Gry Google Play na PC mapują wszystkie zmiany wprowadzone przez użytkownika na domyślne dane wejściowe gry. Dzięki temu gra nie musi rozpoznawać zmian wprowadzonych przez gracza. Jeśli potrzebujesz znać nowe dane wejściowe dla działania w grze, np. aby wyświetlać w niej sterowanie klawiaturą, możesz opcjonalnie zarejestrować wywołanie zwrotne, aby otrzymywać powiadomienia o zdarzeniach związanych ze zmianą mapowania.
Gry Google Play na PC przechowują lokalnie zmienione ustawienia sterowania użytkownika, aby zachować je podczas sesji gier. Ponieważ te ustawienia są przechowywane lokalnie, nie mają wpływu na rozgrywkę na urządzeniu mobilnym i są usuwane po odinstalowaniu Gier Google Play na PC. Ustawienia nie są zachowywane na różnych komputerach.
Aby włączyć w grze zmianę przypisania klawiszy, nie musisz uaktualniać pakietu Input SDK, ale jeśli zostanie wykryta nieobsługiwana konfiguracja, zmiana przypisania klawiszy w grze zostanie wyłączona.
Jeśli chcesz kontrolować ponowne mapowanie danych wejściowych lub funkcja ponownego mapowania jest wyłączona w Twojej grze, wykonaj te czynności:
- Uaktualnij pakiet Input SDK do wersji
1.1.1-beta. - Zaktualizuj wszystkie powiązania klawiszy, aby uniknąć nieobsługiwanych konfiguracji.
- Zaktualizuj
InputMap, aby włączyć funkcję ponownego mapowania.
Jeśli chcesz zrezygnować z funkcji ponownego mapowania w swojej grze, ale nadal wyświetlać wersję tylko do odczytu powiązań klawiszy, wykonaj te czynności:
- Uaktualnij pakiet Input SDK do wersji
1.1.1-beta. - Zaktualizuj
InputMap, aby wyłączyć funkcję ponownego mapowania.
Możesz uaktualnić wersję pakietu Input SDK do 1.1.1-beta, aby korzystać z zaawansowanych funkcji ponownego mapowania w Grach Google Play na PC. W tym celu użyj InputContexts, aby zdefiniować elementy sterujące dla różnych scen w grze, dodać wywołania zwrotne do nasłuchiwania zdarzeń ponownego mapowania, zdefiniować zestaw zarezerwowanych klawiszy, których użytkownik nie może ponownie mapować, i wyłączyć funkcję ponownego mapowania dla InputAction, InputGroup lub InputMap.
Podczas przechodzenia na wyższą wersję weź pod uwagę te wyjątki:
Nieobsługiwane konfiguracje
Zmiana mapowania danych wejściowych jest wyłączona, jeśli nie są spełnione te warunki:
InputAction, który wykorzystuje wiele klawiszy, musi składać się z klawisza modyfikującego i klawisza niemodyfikującego. Na przykładShift + A jest prawidłowy, aleA + B ,Ctrl + Alt iShift + A + Tab są nieprawidłowe.Co najmniej 2 obiekty
InputActionlubInputGroupnie mogą mieć tego samego unikalnego identyfikatora.
Przedstawiamy InputContext
InputContext umożliwia grze używanie tego samego klawisza do różnych działań bez konfliktów. Dzięki temu, jeśli gra używa spacji do skakania podczas rozgrywki i do potwierdzania wyboru w menu, gracze mogą indywidualnie przypisać
Ten diagram sekwencji pokazuje, jak interfejs setInputContext() API działa w czasie wykonywania:

Uaktualnij
Gry korzystające z poprzednich implementacji pakietu Input SDK nadal obsługują podstawowe ponowne mapowanie, chyba że używają nieobsługiwanej konfiguracji. Jeśli Twoja gra korzysta ze starszej wersji pakietu SDK Input, zapoznaj się z przewodnikiem po aktualizacji z wersji 0.0.4 do wersji 1.0.0-beta.
Uaktualnienie do wersji 1.1.1-beta umożliwia korzystanie z nowych funkcji, takich jak:
- Zmiany kontekstu wyzwalania.
- Otrzymywanie powiadomień o kluczowych zdarzeniach mapowania
- Wyłączanie ponownego mapowania dla poszczególnych działań, grup, kontekstów lub map.
Instalacja
Wtyczka Unity w wersji 1.1.1-beta jest dostępna do użytku. Musisz usunąć wszystkie poprzednie wersje pakietu Input SDK zainstalowane w grze i przejść na bieżącą wersję.
Aby dodać do gry pakiet Input SDK w wersji 1.1.1-beta, zapoznaj się z sekcją Dodawanie pakietu SDK.
Definiowanie pól statycznych
W przypadku wersji 1.1.1-beta warto zdefiniować InputActions, InputGroups, InputContexts i InputMap jako pola statyczne klasy InputMappingProvider, ponieważ będą one dostępne z innych części aplikacji:
#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
Aktualizowanie InputActions
Metoda InputAction.create() pakietu Input SDK 1.0.0-beta została wycofana. InputAction ma identyfikator wersji i może być oznaczony jako element, którego mapowanie można zmienić, lub nie. InputAction zdefiniowany za pomocą pakietu Input SDK
1.0.0-beta create() można domyślnie ponownie mapować i nie zawiera informacji o obsłudze wersji:
InputAction w pakiecie Input SDK w wersji 1.0.0-beta
var driveAction = PlayInputAction.Create(
"Drive",
(long)InputEventIds.DRIVE,
PlayInputControls.Create(
new[] { AndroidKeyCode.KEYCODE_SPACE },
new List<PlayMouseAction>()
)
);
InputAction w pakiecie Input SDK w wersji 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 w pakiecie Input SDK w wersji 1.1.1-beta (z ciągiem tekstowym wersji)
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
);
Więcej informacji o obsłudze wersji powiązań klawiszy znajdziesz w artykule Śledzenie identyfikatorów kluczy.
Aktualizowanie grup wejściowych
W sekcji Input SDK 1.1.1-beta musisz jednoznacznie zidentyfikować każdy InputGroup. Każda InputAction należy do InputGroup – kolekcji powiązanych działań. Ułatwia to nawigację i zwiększa wykrywalność elementów sterujących podczas rozgrywki. Podobnie jak InputAction musi mieć niepowtarzalny identyfikator wśród wszystkich działań w ramach jednego InputContext, InputGroup musi mieć niepowtarzalny identyfikator wśród istniejących grup.
W przykładach w tej sekcji gra ma 2 obiektyInputContext reprezentujące menu główne i rozgrywkę. Odpowiednie identyfikatory są śledzone w przypadku każdego InputGroup w tych kontekstach przy użyciu tego wyliczenia:
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
}
Podobnie jak InputAction, metoda InputGroup.create() pakietu Input SDK1.0.0-beta została wycofana. Musisz zaktualizować InputGroup w grzeInputActionza pomocą identyfikatora wersji i wartości logicznej wskazującej, czy obiekty InputActionInputActionw grupach można ponownie mapować. Grupy utworzone za pomocą wycofanej metody 1.0.0-beta create() pakietu Input SDK można ponownie mapować, mają one identyfikator 0, a identyfikator wersji jest pustym ciągiem znaków (""):
InputGroup w pakiecie Input SDK w wersji 1.0.0-beta
var gameInputGroup = PlayInputGroup.Create(
"Road controls",
new List<PlayInputAction>
{
driveAction,
turboAction,
openGarageAction,
openPgsAction,
openStoreAction
}
);
InputGroup w pakiecie Input SDK w wersji 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 w pakiecie Input SDK w wersji 1.1.1-beta (z ciągiem tekstowym wersji)
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
);
Więcej informacji o obsłudze wersji powiązań klawiszy znajdziesz w artykule Śledzenie identyfikatorów kluczy.
Aktualizowanie InputMap
Metoda InputMap.create() w pakiecie Input SDK 1.0.0-beta została wycofana. Zaktualizuj InputMap, aby przypisać identyfikator wersji, całkowicie zrezygnować z funkcji ponownego mapowania lub przypisać listę zarezerwowanych klawiszy w grze, których użytkownik nie może używać do ponownego mapowania. Każdy InputMapzdefiniowany za pomocą metody Input SDK 1.0.0-beta create() jest domyślnie mapowalny, ma identyfikator 0 i nie ma żadnych zarezerwowanych klawiszy.
InputMap w pakiecie Input SDK w wersji 1.0.0-beta
var gameInputMap = PlayInputMap.Create(
new List<PlayInputGroup>
{
gameInputGroup,
menuInputGroup
},
PlayMouseSettings.Create(false, false)
);
InputMap w pakiecie Input SDK w wersji 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()
);
Co dalej?
Kontynuuj uaktualnianie do wersji 1.1.1-beta, przypisując różne elementy sterujące do różnych scen za pomocą InputContexts lub aktualizując interfejs gry przez otrzymywanie powiadomień o zdarzeniach ponownego mapowania za pomocą InputRemappingListeners.
Podczas aktualizowania przypisań klawiszy zapoznaj się z sprawdzonymi metodami projektowania przypisań klawiszy i weź pod uwagę ograniczenia oraz limity funkcji ponownego mapowania.