Esegui l'upgrade dell'SDK di Input per Unity alla versione 1.1

Questa guida spiega come eseguire l'upgrade del tuo gioco dalla versione 1.0 all'SDK di input 1.1 per Unity. Fai clic qui per le istruzioni relative a Java e Kotlin.

Note sulla versione

Google Play Giochi su PC supporta la rimappatura dei controlli da tastiera in base sulle associazioni di tasti fornite dal tuo gioco usando l'SDK di input.

Per accedere a questa funzionalità, gli utenti devono l'overlay, selezionando i controlli, e facendo clic sull'azione che vogliono rimappare.

Google Play Giochi su PC mappa ogni input rimappato dall'utente sul valore predefinito del tuo gioco di testo. 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 mostrare controlli da tastiera nel gioco, puoi facoltativamente registrare un callback per gli eventi di rimappatura.

Google Play Giochi su PC memorizza in locale i controlli rimappati dell'utente per mantenerli in sessioni di gioco. Poiché queste impostazioni sono memorizzate localmente, influenzano l'esperienza mobile e vengono eliminati al momento della disinstallazione di Google Play Giochi su PC. Le impostazioni non vengono mantenute su più PC.

Non è necessario eseguire l'upgrade dell'SDK di input per attivare la rimappatura dei tasti in il gioco, ma la rimappatura verrà disattivata per il gioco se rilevata la configurazione non supportata.

Se vuoi controllare l'esperienza di rimappatura dell'input o la funzionalità di rimappatura è disattivato per il tuo gioco, svolgi i seguenti passaggi:

  • Esegui l'upgrade all'SDK di input 1.1.0-beta.
  • Aggiorna eventuali associazioni di tasti per evitare configurazioni non supportate.
  • Aggiorna InputMap per impostare la funzionalità di rimappatura attivata.

Se vuoi disattivare la funzionalità di rimappatura per il tuo gioco mentre ti trovi ancora per visualizzare la versione di sola lettura delle associazioni di chiavi, segui questi passaggi:

  • Esegui l'upgrade all'SDK di input 1.1.0-beta.
  • Aggiorna il tuo InputMap per impostare la funzionalità di rimappatura disattivata.

Puoi eseguire l'upgrade della tua versione dell'SDK di input a 1.1.0-beta per utilizzare sfruttare le funzionalità di rimappatura avanzate di Google Play Giochi su PC utilizzando InputContexts per definire i controlli per diverse scene del gioco, aggiungi per ascoltare gli eventi di rimappatura, definisci un insieme di chiavi riservate l'utente non può rimappare e disattivare la funzionalità di rimappatura per InputAction, InputGroup o InputMap.

Quando esegui l'upgrade, considera le seguenti eccezioni:

Configurazioni non supportate

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

  • Un InputAction che utilizza più chiavi deve essere composto da un modificatore e una chiave non modificatrice. Ad esempio, Maiusc + A è valido ma A + B, Ctrl + Alt e Maiusc + A + Tab non sono validi.

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

Introduzione a InputContext

Un InputContext consente a un gioco di usare lo stesso tasto per azioni diverse in al tuo gioco senza conflitti. In questo modo, se un gioco usa spazio per saltare durante il gameplay e per confermare la selezione del menu, i giocatori possono rimappare singolarmente lo spazio per enter nei menu e da spazio a Freccia su durante il gameplay.

Il seguente diagramma di sequenza mostra come funziona l'API setInputContext() in Tempo di esecuzione:

Diagramma che mostra il flusso dell'SDK di input durante la rimappatura delle chiavi.

Esegui l'upgrade

I giochi che utilizzano implementazioni precedenti dell'SDK di input supportano ancora il supporto rimappatura di base, a meno che non utilizzino una configurazione non supportata. Se il gioco utilizza un precedente dell'SDK di input, valuta la possibilità di leggere guida all'upgrade dalla versione 0.0.4 alla versione 1.0.0-beta.

L'upgrade alla versione 1.1.0-beta abilita nuove funzionalità, tra cui:

  • Attivazione delle modifiche di contesto.
  • Ricezione di notifiche di eventi di mappatura delle chiavi
  • Disattivazione della rimappatura per azione, gruppo, contesto o mappa.

Installazione

Il plug-in Unity v1.1.0-beta è disponibile per l'uso. Devi eliminare qualsiasi versioni precedenti dell'SDK di input installate nel gioco ed eseguire l'upgrade alla versione attuale.

Per aggiungere l'SDK di input v1.1.0-beta al tuo gioco, vedi Aggiunta dell'SDK.

Definisci campi statici

Per la versione 1.1.0-beta è buona norma definire InputActions, InputGroups, InputContexts e InputMap come campi statici di InputMappingProvider, poiché questi campi saranno accessibili da altri dell'applicazione:

#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

Aggiorna le tue azioni di input

Il metodo InputAction.create() dell'SDK di input 1.0.0-beta è ritirato. Un InputAction ha un identificatore di versione e può essere contrassegnato come rimappabili o meno. Un elemento InputAction definito utilizzando l'SDK di input Il metodo 1.0.0-beta create() è rimappabile per impostazione predefinita e non dispone del controllo delle versioni informazioni:

InputAction nell'SDK di input 1.0.0-beta

var driveAction = PlayInputAction.Create(
    "Drive",
    (long)InputEventIds.DRIVE,
    PlayInputControls.Create(
        new[] { AndroidKeyCode.KEYCODE_SPACE },
        new List<PlayMouseAction>()
    )
);

InputAction nell'SDK di input 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
);

InputAction nell'SDK di input 1.1.0-beta (con stringa di versione)

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

Per ulteriori informazioni sul controllo delle versioni delle associazioni di chiavi, consulta ID chiave di monitoraggio.

Aggiorna i tuoi gruppi di input

Nell'SDK di input 1.1.0-beta devi identificare in modo univoco ogni InputGroup. Ogni InputAction appartiene a un InputGroup, una raccolta di azioni correlate. Ciò migliora la navigazione e la rilevabilità dei controlli durante il gameplay. Così come un InputAction deve avere un identificatore univoco tra tutte le azioni in un singolo InputContext, un InputGroup deve avere un l'ID univoco nei gruppi esistenti.

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

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, il metodo InputGroup.create() dell'SDK di input 1.0.0-beta è stato deprecato. Devi aggiornare InputGroup nel gioco con un identificatore di versione e un valore booleano che indica se il valore InputAction gli oggetti nei tuoi gruppi sono rimappabili. I gruppi creati con il metodo create() deprecato dell'SDK di input 1.0.0-beta sono rimappabili e hanno l'ID 0. e l'ID versione è una stringa vuota (""):

InputGroup nell'SDK di input 1.0.0-beta

var gameInputGroup = PlayInputGroup.Create(
    "Road controls",
    new List<PlayInputAction>
    {
        driveAction,
        turboAction,
        openGarageAction,
        openPgsAction,
        openStoreAction
    }
);

InputGroup nell'SDK di input 1.1.0-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 nell'SDK di input 1.1.0-beta (con stringa di versione)

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

Per ulteriori informazioni sul controllo delle versioni delle associazioni di chiavi, vedi ID chiave di monitoraggio.

Aggiorna la tua InputMap

Il metodo InputMap.create() dell'SDK di input 1.0.0-beta è stato ritirato. Aggiorna InputMap per assegnare un identificatore di versione, disattiva completamente dalla funzionalità di rimappatura o assegnare un elenco di tasti riservati al tuo che l'utente non utilizzi per la rimappatura. Ogni InputMap definita utilizzando il metodo create() dell'SDK di input 1.0.0-beta è rimappabile per impostazione predefinita, è identificato con l'ID 0 e non ha e riservate.

InputMap nell'SDK di input 1.0.0-beta

var gameInputMap = PlayInputMap.Create(
    new List<PlayInputGroup>
    {
        gameInputGroup,
        menuInputGroup
    },
    PlayMouseSettings.Create(false, false)
);

InputMap nell'SDK di input 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()
);

Passaggio successivo

Continua l'upgrade alla versione 1.1.0-beta entro il giorno Assegnare controlli diversi per scene diverse usando InputContexts o aggiornando l'UI del gioco Ricevere notifiche sugli eventi di rimappatura mediante InputRemappingListeners,

Quando aggiorni le associazioni di chiavi, dai un'occhiata Best practice per la progettazione delle associazioni di chiavi e considera le limitazioni e limitazioni della funzionalità di rimappatura.