Z tego przewodnika dowiesz się, jak zaktualizować pakiet SDK do wprowadzania danych w wersji 1.0 w Unity. Aby wyświetlić instrukcje dotyczące Javy i Kotlin, kliknij tutaj.
Informacje o wersji
Gry Google Play na PC obsługują ponowne mapowanie sterowania klawiaturą na podstawie powiązań klawiszy w grze za pomocą pakietu wejściowego SDK.
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 chcesz zmapować.
Gry Google Play na PC mapują wszystkie odpowiednio zmapowane przez użytkownika dane wejściowe w grze. Dzięki temu gra nie musi wiedzieć o zmianie mapowania gracza. Jeśli chcesz znać nowe dane wejściowe dla działania w grze, na przykład wyświetlić elementy sterujące klawiaturą w grze, możesz opcjonalnie zarejestrować wywołanie zwrotne, aby otrzymać powiadomienie o zmianie wydarzeń.
Gry Google Play na PC przechowują odpowiednio zmapowane elementy sterujące użytkownika, aby można było z nich korzystać podczas wszystkich sesji gier. Te ustawienia są przechowywane lokalnie, więc nie mają wpływu na działanie urządzeń mobilnych i są usuwane po odinstalowaniu Gier Google Play na PC. Ustawienia nie są spójne na wielu urządzeniach PC.
Nie musisz uaktualniać pakietu wejściowego SDK, aby włączyć w grze mapowanie klawiszy. Jeśli jednak wykryjemy nieobsługiwaną konfigurację, w grze mapowanie zostanie wyłączone.
Jeśli chcesz kontrolować sposób mapowania danych wejściowych lub wyłączyć funkcję mapowania w Twojej grze, wykonaj te czynności:
- Uaktualnij pakiet SDK do wprowadzania danych
1.1.0-beta
. - Zaktualizuj wszystkie powiązania kluczy, aby uniknąć nieobsługiwanych konfiguracji.
- Zaktualizuj
InputMap
, aby włączyć włączoną funkcję ponownego mapowania.
Jeśli chcesz zrezygnować z funkcji mapowania klawiszy w grze, a jednocześnie nadal wyświetlać wersję tylko do odczytu powiązań klawiszy, wykonaj te czynności:
- Uaktualnij pakiet SDK do wprowadzania danych
1.1.0-beta
. - Zaktualizuj urządzenie
InputMap
, aby wyłączyć funkcję mapowania.
Możesz uaktualnić wersję pakietu SDK do wprowadzania danych do wersji 1.1.0-beta
, aby korzystać z zaawansowanych funkcji mapowania w Grach Google Play na PC. Możesz użyć parametru InputContexts
, aby zdefiniować elementy sterujące różnymi scenami w grze, dodać wywołania zwrotne w celu wykrywania zdarzeń zmiany zmapowanego, zdefiniować zestaw zarezerwowanych kluczy, do których użytkownik nie może przypisywać zmian, i wyłączyć funkcję ponownego mapowania w InputAction
, InputGroup
lub InputMap
.
Podczas uaktualniania weź pod uwagę te wyjątki:
Nieobsługiwane konfiguracje
Mapowanie danych wejściowych jest wyłączone, jeśli nie są spełnione te warunki:
InputAction
, który korzysta z wielu kluczy, musi składać się z klucza modyfikującego i niemodyfikacyjnego. Na przykład kombinacjaShift + A jest prawidłowa, aleA + B ,Ctrl + Alt iShift + A + Tab jest nieprawidłowa.Co najmniej 2 obiekty
InputAction
lubInputGroup
nie mogą mieć tego samego unikalnego identyfikatora.
Przedstawiamy informacje o tym rodzaju
InputContext
umożliwia używanie tego samego klucza do różnych działań w grze bez konfliktów. Dzięki temu, jeśli w grze jest miejsce na skakanie i trzeba potwierdzić wybór menu, gracze mogą odpowiednio zmienić
Ten diagram sekwencji pokazuje, jak interfejs setInputContext()
API działa w środowisku wykonawczym:
Przejdź na Gemini Advanced
Gry korzystające z wcześniejszych implementacji pakietu SDK do wprowadzania danych nadal obsługują podstawowe mapowanie, chyba że używają nieobsługiwanej konfiguracji. Jeśli Twoja gra korzysta ze starszej wersji pakietu wejściowego SDK, przeczytaj przewodnik uaktualnienia z wersji 0.0.4 do 1.0.0 w wersji beta.
Przejście na wersję 1.1.0 w wersji beta włącza nowe funkcje, w tym:
- Wywoływanie zmian kontekstu.
- Otrzymywanie powiadomień o kluczowych zdarzeniach mapowania
- Wyłączam ponowne mapowanie dla akcji, grupy, kontekstu lub mapy.
Instalacja
Możesz użyć wtyczki Unity w wersji 1.1.0-beta. Musisz usunąć wszystkie wcześniejsze wersje pakietu wejściowego SDK zainstalowanego w grze i zaktualizować go do aktualnej wersji.
Aby dodać do gry pakiet wejściowego pakietu SDK w wersji 1.1.0-beta, przeczytaj sekcję o dodawaniu pakietu SDK.
Zdefiniuj pola statyczne
W przypadku wersji 1.1.0 (beta) dobrze jest zdefiniować pola InputActions
, InputGroups
, InputContexts
i InputMap
jako statyczne pola klasy InputMappingProvider
, ponieważ będą one dostępne w innych częściach 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
Zaktualizuj swoje działania wejściowe
InputAction
Metoda InputAction.create()
w pakiecie SDK do wprowadzania danych 1.0.0-beta
została wycofana. Element InputAction
ma identyfikator wersji i może być oznaczony jako możliwy do powielania lub nie. Element InputAction
zdefiniowany za pomocą metody 1.0.0-beta
create()
z pakietu wejściowego SDK jest domyślnie możliwy do ponownego przypisania i nie zawiera informacji o wersji:
Akcja wprowadzanie w pakiecie SDK do wprowadzania danych w wersji 1.0.0-beta
var driveAction = PlayInputAction.Create(
"Drive",
(long)InputEventIds.DRIVE,
PlayInputControls.Create(
new[] { AndroidKeyCode.KEYCODE_SPACE },
new List<PlayMouseAction>()
)
);
Działanie wejściowe w pakiecie SDK do wprowadzania danych w wersji 1.1.0-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
);
Działanie wejściowe funkcji w pakiecie SDK w wersji 1.1.0-beta (z ciągiem znaków 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.
Zaktualizuj grupy wejściowe
We wejściowym pakiecie SDK 1.1.0-beta
musisz jednoznacznie identyfikować każdy element (InputGroup
). Każdy element InputAction
należy do InputGroup
, czyli zbioru powiązanych działań. Poprawia to nawigację i wykrywalność elementów sterujących podczas rozgrywki. Tak jak InputAction
musi mieć unikalny identyfikator wśród wszystkich działań w jednym elemencie InputContext
, tak InputGroup
musi mieć unikalny identyfikator we wszystkich istniejących grupach.
W przykładach z tej sekcji gra zawiera 2 obiekty InputContext
reprezentujące menu główne i rozgrywkę. Odpowiednie identyfikatory są śledzone dla każdego elementu InputGroup
w tych kontekstach za pomocą 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
}
Tak jak w przypadku InputAction
, metoda InputGroup.create()
w pakiecie SDK do wprowadzania danych 1.0.0-beta
została wycofana. Musisz zaktualizować InputGroup
w grze, podając identyfikator wersji i wartość logiczna wskazującą, czy obiekty InputAction
w grupach można wykorzystać ponownie. Grupy utworzone za pomocą wycofanej metody create()
pakietu wejściowego 1.0.0-beta
z pakietu SDK można przypisać ponownie. Grupy te mają identyfikator 0, a identyfikator wersji jest pustym ciągiem znaków (""
):
Grupa wejściowa w pakiecie SDK do wprowadzania danych w wersji 1.0.0 beta
var gameInputGroup = PlayInputGroup.Create(
"Road controls",
new List<PlayInputAction>
{
driveAction,
turboAction,
openGarageAction,
openPgsAction,
openStoreAction
}
);
Grupa wejściowa w pakiecie SDK do wprowadzania danych w wersji beta 1.1.0
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
);
Grupa wejściowa w pakiecie SDK do wprowadzania danych w wersji 1.1.0-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 obsłudze wersji powiązań kluczy znajdziesz w artykule Identyfikatory kluczy śledzenia.
Aktualizowanie mapy wejściowej
Metoda InputMap.create()
w pakiecie SDK 1.0.0-beta
została wycofana. Zaktualizuj urządzenie InputMap
, aby przypisać identyfikator wersji, zrezygnuj całkowicie z funkcji mapowania lub przypisz listę zarezerwowanych kluczy do gry, których użytkownik nie ma używać do ponownego mapowania. Każdy element InputMap
określony za pomocą metody wejściowego pakietu SDK 1.0.0-beta
create()
jest domyślnie możliwy do ponownego przypisania, jest identyfikowany za pomocą identyfikatora 0
i nie ma żadnych zarezerwowanych kluczy.
Identyfikator wejściowy w pakiecie SDK wejściowym w wersji 1.0.0-beta
var gameInputMap = PlayInputMap.Create(
new List<PlayInputGroup>
{
gameInputGroup,
menuInputGroup
},
PlayMouseSettings.Create(false, false)
);
Mapa wprowadzania w pakiecie SDK wejściowym w wersji 1.1.0-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
Przejdź na wersję 1.1.0 w wersji beta, przypisując różne elementy sterujące do różnych scen za pomocą InputContexts
lub aktualizując interfejs gry za pomocą opcji Otrzymywanie powiadomień o zmianie mapowania zdarzeń w aplikacji InputRemappingListeners
.
Podczas aktualizowania powiązań kluczy zapoznaj się ze sprawdzonymi metodami ich projektowania oraz weź pod uwagę ograniczenia i ograniczenia funkcji mapowania.