Z tego przewodnika dowiesz się, jak zaktualizować grę z wersji beta 1.0.0 Wejściowy pakiet SDK dla Javy i Kotlin do wersji 1.1.0-beta. Zobacz Przewodnik po uaktualnieniu Unity dla Unity lub szczegółowych instrukcji.
Informacje o wersji
Gry Google Play na PC obsługują przemapowanie sterowania za pomocą klawiatury na powiązaniach kluczy, które dostarcza gra za pomocą pakietu SDK danych wejściowych.
Aby uzyskać dostęp do tej funkcji, należy otworzyć nakładkę, wybranie elementów sterujących, a potem kliknij działanie, którego przypisanie chcesz zmienić.
Gry Google Play na PC mapują wszystkie dane wprowadzone przez użytkownika na domyślne ustawienia gry dane wejściowe. Dzięki temu gra nie musi pamiętać o mapowaniu graczy. Jeśli musisz znać nowy typ danych wejściowych dla działania w grze. Na przykład sterowanie za pomocą klawiatury możesz opcjonalnie zarejestrować wywołanie zwrotne powiadomienia o ponownym mapowaniu zdarzeń.
Gry Google Play na PC zapisują lokalnie przeniesione elementy sterujące każdego użytkownika, są trwałe podczas sesji gry. Dane są przechowywane lokalnie, więc nie są wpływają na wygodę korzystania z urządzenia mobilnego i są usuwane po odinstalowaniu Gier Google Play na PC. Ustawienia kontrolne nie są zachowywane w wielu miejscach Komputery PC.
Nie musisz uaktualniać pakietu SDK danych wejściowych, aby włączyć ponowne mapowanie kluczy gry, ale możesz wyłączyć funkcję ponownego mapowania, jeśli wykryto nieobsługiwaną konfigurację.
Jeśli chcesz kontrolować proces ponownego mapowania danych wejściowych lub jest wyłączona w Twojej grze, wykonaj te czynności, by rozwiązać ten problem:
- Uaktualnij pakiet SDK do wejścia
1.1.0-beta
. - Zaktualizuj powiązania klawiszy, aby uniknąć nieobsługiwane konfiguracje.
- Zaktualizuj urządzenie
InputMap
, aby włączyć funkcję ponownego mapowania.
Jeśli chcesz zrezygnować z funkcji ponownego mapowania gry, jeśli wyświetlasz wersję powiązań kluczy tylko do odczytu, wykonaj te czynności:
- Uaktualnij pakiet SDK do wejścia
1.1.0-beta
. - Zaktualizuj urządzenie
InputMap
, aby ustawić wyłączoną funkcję ponownego mapowania.
Możesz uaktualnić swoją wersję pakietu SDK wejścia do wersji 1.1.0-beta
,
możesz korzystać z zaawansowanych funkcji ponownego mapowania w Grach Google Play na PC przy użyciu
InputContexts
, aby określić elementy sterujące różnymi scenami gry, dodaj
wywołań zwrotnych, aby nasłuchiwać zdarzeń ponownego mapowania, zdefiniować zbiór zarezerwowanych kluczy, które
użytkownik nie może zmienić mapowania ani dezaktywować funkcji ponownego mapowania na InputAction
,
InputGroup
lub InputMap
.
Podczas uaktualniania pakietu SDK do nowej wersji 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:
Funkcja
InputAction
wykorzystująca wiele kluczy musi zawierać modyfikator i niemodyfikatorowi. Na przykładShift + A jest prawidłowy, aleA + B ,Ctrl + Alt orazShift + A + Tab to nie opcje.Co najmniej 2 obiekty
InputAction
lubInputGroup
nie mogą mieć tego samego unikalny identyfikator.
Uaktualnij
Wejściowy pakiet SDK w wersji 1.1.0-beta jest zgodny wstecznie z pakietem SDK wejścia 1.0.0-beta. Gry, które korzystają z wcześniejszych implementacji pakietu SDK wejścia nadal obsługują podstawowe ponowne mapowanie, chyba że używają nieobsługiwana konfiguracja. Jeśli gra korzysta z pakietu Wejściowa wersja SDK, zapoznaj się z przewodnika po uaktualnieniu z wersji 0.0.4 do wersji 1.0.0-beta.
Po przejściu na wersję beta 1.1.0 zyskujesz dostęp do nowych funkcji, takich jak:
- Aktywowanie zmian elementów sterujących sceny.
- Otrzymywanie powiadomień o kluczowych zdarzeniach mapowania.
- Wyłączenie ponownego mapowania akcji, grupy, kontekstu lub mapy.
Uaktualnij zależność
Jeśli do importowania pakietu SDK danych wejściowych używasz Gradle, uaktualnij pakiet do najnowszej wersji:
// build.gradle
dependencies {
...
implementation 'com.google.android.libraries.play.games:inputmapping:1.1.0-beta'
...
}
Zdefiniuj pola statyczne
W przypadku wersji 1.1.0-beta
warto zdefiniować pole InputAction
,
InputGroup
, InputContext
i InputMap
obiekty jako pola statyczne obiektu
Klasa InputMappingProvider
, ponieważ te pola są dostępne z innych części
Twojej aplikacji:
Kotlin
class InputSDKProvider : InputMappingProvider {
override fun onProvideInputMap(): InputMap { return gameInputMap }
companion object {
const val INPUTMAP_VERSION = "1.0.0"
private val moveUpInputAction = InputAction.create(...)
private val movementInputGroup = InputGroup.create(...)
val menuContext = InputContext.create(...)
val gameInputMap = InputMap.create(...)
}
}
Java
public class MyInputMappingProvider implements InputMappingProvider {
private static final String INPUTMAP_VERSION = "1.0.0";
private static final InputAction moveUpInputAction =
InputAction.create(...);
private static final InputGroup movementInputGroup = InputGroup.create(...);
public static final InputContext menuContext = InputContext.create(...);
public static final InputMap gameInputMap = InputMap.create(...);
@Override
public InputMap onProvideInputMap() {
return gameInputMap;
}
}
Zaktualizuj wprowadzone działania
Metoda InputAction.create()
pakietu SDK wejściowego 1.0.0-beta
to
wycofane. Element InputAction
ma teraz identyfikator wersji i można go oznaczyć jako
lub nie. InputAction
zdefiniowany za pomocą wejściowego pakietu SDK
Metoda 1.0.0-beta
create()
jest domyślnie wykorzystywana ponownie i nie ma obsługi wersji
informacje:
Wejściowe działanie w pakiecie SDK wejścia w wersji 1.0.0 (beta)
Kotlin
val jumpInputAction = InputAction.create(
"Jump",
InputEventIds.JUMP.id,
InputControls.create(
listOf(KeyEvent.KEYCODE_SPACE),
emptyList()
)
)
Java
InputAction moveUpInputAction = InputAction.create(
"Move Up",
InputEventIds.MOVE_UP.ordinal(),
InputControls.create(
Collections.singletonList(KeyEvent.KEYCODE_W),
Collections.emptyList()
)
);
Wejściowe działanie w pakiecie SDK wejścia w wersji 1.1.0 (beta)
Kotlin
companion object {
private val moveUpInputAction = InputAction.create(
"Move Up",
InputActionsIds.DRIVE.ordinal.toLong(),
InputControls.create(listOf(KeyEvent.KEYCODE_W), emptyList()),
InputEnums.REMAP_OPTION_ENABLED) // This action is remappable
}
Java
private static final InputAction moveUpInputAction = InputAction.create(
"Move Up",
InputEventIds.MOVE_UP.ordinal(),
InputControls.create(
Collections.singletonList(KeyEvent.KEYCODE_W),
Collections.emptyList()),
InputEnums.REMAP_OPTION_ENABLED // this action is remappable
);
Dane wejściowe działania w pakiecie SDK danych wejściowych w wersji 1.1.0 beta (z ciągiem znaków wersji)
Kotlin
private val enterMenuInputAction = InputAction.create(
"Enter menu",
InputControls.create(listOf(KeyEvent.KEYCODE_ENTER), emptyList()),
InputIdentifier.create(
INPUTMAP_VERSION, InputActionsIds.ENTER_MENU.ordinal.toLong()),
InputEnums.REMAP_OPTION_ENABLED
)
Java
private static final InputAction moveUpInputAction = InputAction.create(
"Move Up",
InputControls.create(
Collections.singletonList(KeyEvent.KEYCODE_W),
Collections.emptyList()),
InputIdentifier.create(
INPUTMAP_VERSION,
InputEventIds.MOVE_UP.ordinal()),
InputEnums.REMAP_OPTION_ENABLED // this action is remappable
);
Więcej informacji o obsłudze wersji powiązań kluczy znajdziesz w artykule Identyfikatory kluczy śledzenia.
Zaktualizuj grupy wejściowe
W pakiecie SDK danych wejściowych 1.1.0-beta
musisz jednoznacznie zidentyfikować każdy
InputGroup
Każdy element InputAction
należy do elementu InputGroup
– zbioru
powiązanych działań. Ułatwi to nawigację i wykrywalność elementów sterujących.
podczas rozgrywki. W ten sam sposób, w jaki InputAction
musi mieć unikalny identyfikator.
wśród wszystkich działań w pojedynczym elemencie InputContext
, InputGroup
musi mieć
unikalny identyfikator w istniejących grupach.
W przykładach w tej sekcji gra ma 2 obiekty InputContext
które reprezentują menu główne i rozgrywkę. Przy każdym z nich śledzone są odpowiednie identyfikatory
InputGroup
w tych kontekstach przy użyciu następującego wyliczenia:
Kotlin
enum class 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
}
Java
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
}
Metoda InputGroup.create()
pakietu SDK wejściowego (tak jak InputAction
)
Usługa 1.0.0-beta
została wycofana. Musisz zaktualizować: InputGroup
w grze
z identyfikatorem wersji i wartością logiczną, która wskazuje, czy InputAction
obiekty w grupach można mapować ponownie. Grupy utworzone za pomocą wycofanej metody pakietu SDK wejścia 1.0.0-beta
create()
można zmapować i mieć identyfikator 0.
a identyfikator wersji jest pustym ciągiem znaków (""
):
Wejściowa grupa w pakiecie SDK do wprowadzania danych w wersji 1.0.0 (beta)
Kotlin
val movementInputGroup = InputGroup.create(
"Basic Movement",
listOf(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction)
)
Java
InputGroup movementInputGroup = InputGroup.create(
"Basic movement",
Arrays.asList(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction
)
);
Wejściowa grupa w pakiecie SDK do wprowadzania danych w wersji 1.1.0 (beta)
Kotlin
companion object {
private val movementInputGroup = InputGroup.create(
"Basic movement",
listOf(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction),
InputGroupsIds.BASIC_MOVEMENT.ordinal.toLong(),
// All the actions in this groups can't be remapped
InputEnums.REMAP_OPTION_DISABLED
)
}
Java
private static final InputGroup movementInputGroup = InputGroup.create(
"Basic movement",
Arrays.asList(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction
),
InputGroupsIds.BASIC_MOVEMENT.ordinal(),
// All the actions in this groups can't be remapped
InputEnums.REMAP_OPTION_DISABLED
);
Wejściowa grupa w pakiecie SDK danych wejściowych w wersji 1.1.0-beta (z ciągiem znaków wersji)
Kotlin
companion object {
private val movementInputGroup = InputGroup.create(
"Basic movement",
listOf(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction),
InputIdentifier.create(
INPUTMAP_VERSION, InputGroupsIds.BASIC_MOVEMENT.ordinal.toLong()),
// All the actions in this groups can't be remapped
InputEnums.REMAP_OPTION_DISABLED
)
}
Java
private static final InputGroup movementInputGroup = InputGroup.create(
"Basic movement",
Arrays.asList(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction
),
InputIdentifier.create(
INPUTMAP_VERSION,
InputGroupsIds.BASIC_MOVEMENT.ordinal()),
// All the actions in this groups can't be remapped
InputEnums.REMAP_OPTION_DISABLED
);
Więcej informacji o obsłudze wersji powiązań kluczy znajdziesz w artykule Identyfikatory kluczy śledzenia.
Zaktualizuj Twoją mapę wejściową
Metoda InputMap.create()
pakietu SDK wejściowego 1.0.0-beta
to
wycofane. Zaktualizuj urządzenie InputMap
, aby przypisać identyfikator wersji; zrezygnuj
całkowicie z funkcji ponownego mapowania lub przypisz listę zarezerwowanych kluczy
która nie powinna być używana do ponownego mapowania. Co tydzień – InputMap
zdefiniowane za pomocą metody 1.0.0-beta
create()
pakietu SDK wejściowego to
domyślnie możliwy do ponownego przypisania, ma identyfikator 0
i nie ma żadnych
zarezerwowane klucze.
wejściowego pakietu SDK w wersji 1.0.0 beta,
Kotlin
val gameInputMap = InputMap.create(
listOf(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false)
)
Java
InputMap gameInputMap = InputMap.create(
Arrays.asList(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false)
);
wejściowego pakietu SDK w wersji 1.1.0 beta,
Kotlin
companion object {
const val INPUTMAP_VERSION = "1.0.0"
const val INPUT_MAP_ID = 0
val gameInputMap = InputMap.create(
listOf(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false),
InputIdentifier.create(INPUTMAP_VERSION, INPUT_MAP_ID.toLong()),
InputEnums.REMAP_OPTION_ENABLED,
// Use ESCAPE as reserved key
listof(InputControls.create(listOf(KeyEvent.KEYCODE_ESCAPE), emptyList()))
)
}
Java
public static final String INPUT_MAP_VERSION = "1.0.0-beta";
public static final long INPUT_MAP_ID = 0;
public static final InputMap gameInputMap = InputMap.create(
Arrays.asList(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false),
InputIdentifier.create(INPUTMAP_VERSION, INPUT_MAP_ID),
InputEnums.REMAP_OPTION_ENABLED,
// Use ESC key as reserved key
Arrays.asList(
InputControls.create(
Collections.singletonList(KeyEvent.KEYCODE_ESCAPE),
Collections.emptyList()
)
)
);
Co dalej
Kontynuuj uaktualnianie wersji beta do wersji 1.1.0 do
Przypisywanie różnych elementów sterujących do różnych scen
za pomocą InputContexts
lub aktualizując interfejs gry przez
Otrzymywanie powiadomień o remapowaniu zdarzeń za pomocą
InputRemappingListeners
.
Podczas aktualizowania powiązań kluczy spójrz na Sprawdzone metody projektowania powiązań kluczy oraz wziąć pod uwagę ograniczenia ograniczenia funkcji ponownego mapowania.