Z tego przewodnika dowiesz się, jak uaktualnić grę z wersji 1.0 do pakietu Input SDK 1.1 dla Unity. Kliknij tutaj, aby uzyskać instrukcje dotyczące języków Java i Kotlin.
Informacje o wersji
Gry Google Play na PC umożliwiają przemapowanie elementów sterujących klawiatury na podstawie powiązań klawiszy w grze za pomocą pakietu SDK do wprowadzania danych.
Użytkownicy uzyskują dostęp do tej funkcji, otwierając nakładkę, wybierając sterowanie, a następnie klikając działanie, które chcą przemapować.
Gry Google Play na PC przypisują każde przypisanie przez użytkownika domyślnego wejścia do gry. Dzięki temu gra nie musi pamiętać o mapowaniu graczy. Jeśli potrzebujesz dostępu do nowego urządzenia wejściowego dla działania w grze, na przykład do wyświetlania elementów sterujących na klawiaturze, możesz opcjonalnie zarejestrować wywołanie zwrotne, które będzie otrzymywać powiadomienia o mapowaniu zdarzeń.
Gry Google Play na PC przechowują przypisane przez użytkownika kontrolery lokalnie, aby zachować je na kolejne sesje gry. Ponieważ te ustawienia są przechowywane lokalnie, nie wpływają na korzystanie z aplikacji na urządzeniu mobilnym i są usuwane po odinstalowaniu Gier Google Play na PC. Ustawienia nie są zachowywane na wielu komputerach.
Aby włączyć w grze mapowanie klawiszy, nie musisz aktualizować pakietu Input SDK, ale jeśli wykryjemy nieobsługiwaną konfigurację, mapowanie zostanie wyłączone.
Jeśli chcesz kontrolować przemapowanie wejść lub funkcja przemapowania jest wyłączona w przypadku Twojej gry, wykonaj te czynności:
- Uaktualnij pakiet SDK Input do wersji
1.1.1-beta
. - Zaktualizuj dowolne kombinacje klawiszy, aby uniknąć nieobsługiwanych konfiguracji.
- Zaktualizuj
InputMap
, aby włączyć funkcję przemapowania .
Jeśli chcesz zrezygnować z funkcji ponownego mapowania w grze, ale nadal wyświetlać wersję tylko do odczytu przypisanych klawiszy, wykonaj te czynności:
- Uaktualnij pakiet SDK Input do wersji
1.1.1-beta
. - Zaktualizuj urządzenie
InputMap
, aby wyłączyć funkcję ponownego mapowania.
Aby korzystać z zaawansowanych funkcji przemapowania w Google Play Games na PC, możesz uaktualnić pakiet SDK do wprowadzania danych wejściowych do wersji 1.1.1-beta
. Aby to zrobić, użyj elementu InputContexts
do zdefiniowania elementów sterujących w różnych scenach gry, dodaj wywołania zwrotne do nasłuchiwania zdarzeń przemapowania, zdefiniuj zestaw zablokowanych klawiszy, których użytkownik nie może przemapować, oraz wyłącz funkcję przemapowania za pomocą elementu InputAction
, InputGroup
lub InputMap
.
Podczas aktualizacji weź pod uwagę te wyjątki:
Nieobsługiwane konfiguracje
Ponowne mapowanie danych wejściowych jest wyłączone, jeśli nie są spełnione te warunki:
InputAction
, który używa wielu klawiszy, musi składać się z klawisza modyfikującego i nie modyfikującego. Na przykładShift + A jest prawidłową kombinacją, aleA + B ,Ctrl + Alt iShift + A + Tab są nieprawidłowe.Co najmniej 2 obiekty
InputAction
lubInputGroup
nie mogą mieć tego samego unikalnego identyfikatora.
Przedstawiamy elementinputContext
InputContext
pozwala grze używać tego samego klawisza do różnych działań w grze bez konfliktów. Jeśli gra używa spacji do skakania podczas rozgrywki i potwierdzania wyboru w menu, gracze mogą indywidualnie przypisać
Ten diagram sekwencji pokazuje, jak działa interfejs API setInputContext()
w czasie wykonywania:
Uaktualnij
Gry korzystające z poprzednich implementacji pakietu SDK do obsługi danych wejściowych nadal obsługują podstawowe przemapowanie, chyba że używają nieobsługiwanej konfiguracji. Jeśli Twoja gra korzysta ze starszej wersji pakietu Input SDK, przeczytaj przewodnik po uaktualnieniu z wersji 0.0.4 do 1.0.0-beta.
Uaktualnienie do wersji 1.1.1 beta umożliwia korzystanie z nowych funkcji, takich jak:
- Zmiany kontekstu wywołania.
- Otrzymywanie powiadomień o kluczowych zdarzeniach mapowania
- Wyłączanie mapowania na poziomie działania, grupy, kontekstu lub mapy.
Instalacja
Możesz użyć wtyczki Unity w wersji 1.1.1-beta. Musisz usunąć wszystkie wcześniejsze wersje pakietu SDK do obsługi danych wejściowych zainstalowane w grze i zaktualizować go do bieżącej wersji.
Aby dodać do gry pakiet SDK Input w wersji 1.1.1-beta, zapoznaj się z artykułem Dodawanie pakietu SDK.
Definiowanie pól statycznych
W wersji 1.1.1-beta warto zdefiniować pola 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 działań związanych z wpisaniem
Metoda InputAction.create()
pakietu Input SDK 1.0.0-beta
została wycofana. InputAction
ma identyfikator wersji i może być oznaczony jako możliwy do zamapowania lub nie. InputAction
zdefiniowany za pomocą pakietu Input SDK
1.0.0-beta
create()
jest domyślnie przypisany i nie zawiera informacji o 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>()
)
);
Wejściowe działanie w pakiecie SDK danych wejściowych 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 1.1.1-beta (z ciągiem 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ń kluczy znajdziesz w artykule Identyfikatory kluczy śledzenia.
Aktualizowanie grup wejściowych
W pakiecie SDK danych wejściowych 1.1.1-beta
musisz jednoznacznie zidentyfikować każde InputGroup
. Każdy element InputAction
należy do elementu InputGroup
, czyli zbioru powiązanych działań. Dzięki temu poprawia się nawigacja i widoczność 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ć unikalny identyfikator wśród wszystkich istniejących grup.
W przykładach z tej sekcji gra ma 2 obiekty InputContext
reprezentujące menu główne i rozgrywkę. W tych kontekstach dla każdego InputGroup
są śledzone odpowiednie identyfikatory za pomocą tej listy:
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
}
Tak jak w przypadku InputAction
, metoda InputGroup.create()
pakietu SDK wejściowego 1.0.0-beta
została wycofana. Musisz zaktualizować InputGroup
w grze za pomocą identyfikatora wersji i wartości logicznej, które wskazują, czy obiekty InputAction
w grupach można zmapować. Grupy utworzone za pomocą wycofanej metody pakietu Input SDK 1.0.0-beta
create()
można ponownie zmapować. Mają one identyfikator 0, a identyfikator wersji to pusty ciąg znaków (""
):
InputGroup w Input SDK 1.0.0-beta
var gameInputGroup = PlayInputGroup.Create(
"Road controls",
new List<PlayInputAction>
{
driveAction,
turboAction,
openGarageAction,
openPgsAction,
openStoreAction
}
);
InputGroup w 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 w pakiecie Input SDK 1.1.1-beta (z ciągiem znaków 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 zarządzaniu wersjami przypisań klawiszy znajdziesz w artykule Śledzenie identyfikatorów kluczy.
Zaktualizuj Twoją mapę wejściową
Metoda InputMap.create()
pakietu Input SDK 1.0.0-beta
została wycofana. Zaktualizuj plik InputMap
, aby przypisać identyfikator wersji, całkowicie zrezygnować z funkcji przemapowania lub przypisać do gry listę zablokowanych kluczy, których użytkownik nie może używać do przemapowania. Każda funkcja InputMap
zdefiniowana za pomocą metody pakietu Input SDK 1.0.0-beta
create()
jest domyślnie możliwa do zamapowania, jest identyfikowana za pomocą identyfikatora 0
i nie ma żadnych zablokowanych klawiszy.
InputMap w Input SDK 1.0.0-beta
var gameInputMap = PlayInputMap.Create(
new List<PlayInputGroup>
{
gameInputGroup,
menuInputGroup
},
PlayMouseSettings.Create(false, false)
);
InputMap w 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()
);
Co dalej
Kontynuuj aktualizację 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 za pomocą InputRemappingListeners
, aby otrzymywać powiadomienia o przemapowaniu zdarzeń.
Podczas aktualizowania przypisania klawiszy zapoznaj się ze sprawdzonymi metodami projektowania przypisania klawiszy i weź pod uwagę ograniczenia oraz ograniczenia funkcji przemapowania.