Esegui l'upgrade dell'SDK di input per Java e Kotlin alla versione 1.1

Questa guida spiega come eseguire l'upgrade del gioco dall'SDK Input 1.0.0-beta per Java e Kotlin alla versione 1.1.1-beta. Per istruzioni specifiche per Unity, consulta la guida all'upgrade di Unity.

Note di rilascio

Google Play Games su PC supporta la rimappatura dei controlli della tastiera in base alle associazioni di tasti fornite dal gioco tramite l'SDK Input.

Gli utenti accedono a questa funzionalità aprendo la sovrapposizione, selezionando i controlli, e facendo clic sull'azione che vogliono rimappare.

Google Play Giochi su PC mappa ogni input rimappato dall'utente sull'input predefinito del gioco. In questo modo, il gioco non deve essere a conoscenza della rimappatura del giocatore. Se devi conoscere il nuovo input per un'azione in-game, ad esempio per visualizzare i controlli della tastiera nel gioco, puoi facoltativamente registrare un callback per ricevere una notifica degli eventi di rimappatura.

Google Play Games su PC memorizza i controlli rimappati di ogni utente localmente, in modo che siano persistenti tra le sessioni di gioco. Poiché questi dati vengono memorizzati localmente, non influenzano l'esperienza mobile e vengono eliminati al momento della disinstallazione di Google Play Giochi su PC. Le impostazioni dei controlli non vengono mantenute su più PC.

Non è necessario eseguire l'upgrade dell'SDK Input per attivare la rimappatura dei tasti nel gioco, ma la rimappatura può essere disattivata per il gioco se viene rilevata una configurazione non supportata.

Se vuoi controllare l'esperienza di rimappatura degli input o se la funzionalità di rimappatura è disattivata per il gioco, segui questi passaggi per risolvere il problema:

  • Esegui l'upgrade all'SDK Input 1.1.1-beta.
  • Aggiorna le associazioni di tasti per evitare le configurazioni non supportate.
  • Aggiorna InputMap per impostare la funzionalità di rimappatura su attivata.

Se vuoi disattivare la funzionalità di rimappatura per il gioco, ma continuare a visualizzare la versione di sola lettura delle associazioni di tasti, segui questi passaggi:

  • Esegui l'upgrade all'SDK Input 1.1.1-beta.
  • Aggiorna InputMap per impostare la funzionalità di rimappatura su disattivata.

Puoi eseguire l'upgrade della versione dell'SDK Input alla versione 1.1.1-beta per sfruttare le funzionalità di rimappatura avanzate di Google Play Games su PC utilizzando InputContexts per definire i controlli per le diverse scene del gioco, aggiungere callback per ascoltare gli eventi di rimappatura, definire un insieme di tasti riservati che l'utente non può rimappare e disattivare la funzionalità di rimappatura per InputAction, InputGroup o InputMap.

Tieni presente le seguenti eccezioni durante l'upgrade alla nuova versione dell'SDK:

Configurazioni non supportate

La rimappatura degli input è disattivata se non vengono soddisfatte le seguenti condizioni:

  • Un InputAction che utilizza più tasti deve essere composto da un tasto di modifica e da un tasto non di modifica. Ad esempio, Maiusc + A è valido, ma A + B, Ctrl + Alt e Maiusc + A + Tab non lo sono.

  • Due o più oggetti InputAction o InputGroup non possono condividere lo stesso ID univoco.

Esegui l'upgrade

L'SDK Input 1.1.1-beta è retrocompatibile con l'SDK Input 1.0.0-beta. I giochi che utilizzano implementazioni precedenti dell'SDK Input supportano ancora la rimappatura di base, a meno che non utilizzino una configurazione non supportata. Se il tuo gioco utilizza una versione precedente dell'SDK Input, ti consigliamo di leggere la guida all'upgrade dalla versione 0.0.4 alla versione 1.0.0-beta.

L'upgrade alla versione 1.1.1-beta attiva nuove funzionalità, tra cui:

Esegui l'upgrade della dipendenza

Se utilizzi Gradle per importare l'SDK Input, esegui l'upgrade alla versione più recente:

// build.gradle
dependencies {
   ...
   implementation 'com.google.android.libraries.play.games:inputmapping:1.1.1-beta'
   ...
}

Definisci i campi statici

Per la versione 1.1.1-beta, ti consigliamo di definire gli oggetti InputAction, InputGroup, InputContext e InputMap come campi statici della classe InputMappingProvider, poiché questi campi sono accessibili da altre parti dell'applicazione:

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;
    }
}

Aggiorna le InputActions

Il metodo InputAction.create() dell'SDK Input 1.0.0-beta è obsoleto. Un InputAction ora ha un identificatore di versione e può essere contrassegnato come rimappabile o meno. Un InputAction definito utilizzando il metodo create() dell'SDK Input 1.0.0-beta è rimappabile per impostazione predefinita e non contiene informazioni sul controllo delle versioni:

InputAction nell'SDK Input 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()
    )
);

InputAction nell'SDK Input 1.1.1-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
);

InputAction nell'SDK Input 1.1.1-beta (con stringa di versione)

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
);

Per ulteriori informazioni sul controllo delle versioni delle associazioni di tasti, consulta la sezione Monitorare gli ID tasto.

Aggiorna gli InputGroups

Nell'SDK Input 1.1.1-beta devi identificare in modo univoco ogni InputGroup. Ogni InputAction appartiene a un InputGroup, ovvero a una raccolta di azioni correlate. In questo modo, la navigazione e la rilevabilità dei controlli durante il gioco migliorano. Allo stesso modo in cui InputAction deve avere un identificatore univoco tra tutte le azioni in un singolo InputContext, un InputGroup deve avere un ID univoco tra i gruppi esistenti.

Per gli esempi in questa sezione, un gioco ha due oggetti InputContext che rappresentano il menu principale e il gameplay. In questi contesti, gli ID appropriati vengono monitorati per ogni InputGroup utilizzando la seguente enumerazione:

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
}

Come InputAction, anche il metodo InputGroup.create() dell'SDK Input 1.0.0-beta è obsoleto. Devi aggiornare InputGroup nel gioco con un identificatore di versione e un valore booleano che indica se gli oggetti InputAction nei gruppi sono rimappabili. I gruppi creati con il metodo create() dell'SDK Input obsoleto 1.0.0-beta sono rimappabili, hanno l'ID 0, e l'ID versione è una stringa vuota (""):

InputGroup nell'SDK Input 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
    )
);

InputGroup nell'SDK Input 1.1.1-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
);

InputGroup nell'SDK Input 1.1.1-beta (con stringa di versione)

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
);

Per ulteriori informazioni sul controllo delle versioni delle associazioni di tasti, consulta la sezione Monitorare gli ID tasto.

Aggiorna l'InputMap

Il metodo InputMap.create() dell'SDK Input 1.0.0-beta è obsoleto. Aggiorna InputMap per assegnare un identificatore di versione, disattivare completamente la funzionalità di rimappatura o assegnare un elenco di tasti riservati per il gioco che non vuoi che l'utente utilizzi per la rimappatura. Ogni InputMap definito utilizzando il metodo 1.0.0-beta create() dell'SDK Input è rimappabile per impostazione predefinita, è identificato con l'ID 0 e non ha tasti riservati.

InputMap nell'SDK Input 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)
);

InputMap nell'SDK Input 1.1.1-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()
                )
        )
);

Passaggi successivi

Continua l'upgrade alla versione 1.1.1-beta assegnando controlli diversi per scene diverse utilizzando InputContexts o aggiornando l'interfaccia utente del gioco ricevendo una notifica degli eventi di rimappatura utilizzandoInputRemappingListeners.

Quando aggiorni le associazioni di tasti, consulta le best practice per la progettazione delle associazioni di tasti e tieni presente le restrizioni e le limitazioni della funzionalità di rimappatura.