Passer à la version 1.1 du SDK Input pour Unity

Ce guide explique comment passer de la version 1.0 du SDK Input pour Unity à la version 1.1 pour votre jeu. Cliquez ici pour obtenir des instructions sur Java et Kotlin.

Notes de version

Google Play Jeux sur PC permet de remapper les commandes du clavier en fonction des combinaisons de touches fournies par votre jeu à l'aide du SDK Input.

Pour accéder à cette fonctionnalité, ouvrez la superposition, sélectionnez les commandes, puis cliquez sur l'action à remapper.

Google Play Jeux sur PC mappe chaque entrée remappée par l'utilisateur avec l'entrée par défaut de votre jeu. Votre jeu n'a donc pas besoin de prendre en compte le remappage du joueur. Si vous avez besoin de connaître la nouvelle entrée correspondant à une action dans le jeu, comme l'affichage des commandes du clavier dans le jeu, vous avez la possibilité d'enregistrer un rappel afin d'être averti des événements de remappage.

Google Play Jeux sur PC stocke localement les commandes remappées afin de conserver les sessions de jeu. Étant donné que ces paramètres sont stockés localement, ils n'ont aucune incidence sur l'expérience mobile et sont supprimés lors de la désinstallation de Google Play Jeux sur PC. Les paramètres ne sont pas conservés sur plusieurs ordinateurs.

Vous n'avez pas besoin de mettre à niveau le SDK Input pour activer le remappage des touches dans le jeu. Toutefois, le remappage est désactivé pour votre jeu si une configuration non compatible est détectée.

Si vous souhaitez contrôler l'expérience de remappage des entrées ou si la fonctionnalité de remappage est désactivée pour votre jeu, procédez comme suit :

  • Installez le SDK Input 1.1.1-beta.
  • Mettez à jour les combinaisons de touches pour éviter les configurations non compatibles.
  • Mettez à jour votre InputMap pour définir la fonctionnalité de remappage comme activée.

Si vous souhaitez désactiver la fonctionnalité de remappage de votre jeu tout en affichant la version en lecture seule de vos combinaisons de touches, procédez comme suit :

  • Installez le SDK Input 1.1.1-beta.
  • Mettez à jour votre InputMap pour définir la fonctionnalité de remappage comme désactivée.

Vous pouvez mettre à niveau votre version du SDK Input vers 1.1.1-beta pour profiter des fonctionnalités de remappage avancées dans Google Play Jeux sur PC. Pour ce faire, utilisez InputContexts afin de définir les commandes pour les différentes scènes de votre jeu, d'ajouter des rappels pour écouter les événements de remappage, de définir un ensemble de touches réservées que l'utilisateur ne peut pas remapper et de désactiver la fonctionnalité de remappage par InputAction, InputGroup ou InputMap.

Lorsque vous passez à une version supérieure, tenez compte des exceptions suivantes :

Configurations non compatibles

Le remappage des entrées est désactivé si les conditions suivantes ne sont pas remplies :

  • Une InputAction qui utilise plusieurs touches doit être composée d'une touche de modification et d'une touche de non-modification. Par exemple, Maj+A est valide, mais A+B, Ctrl+Alt et Maj+A+Tabulation ne le sont pas.

  • Deux objets InputAction ou InputGroup ou plus ne peuvent pas partager le même ID unique.

Présentation d'InputContext

Un élément InputContext permet à un jeu d'utiliser la même touche pour différentes actions de votre jeu sans conflit. Ainsi, si l'espace permet au joueur de sauter pendant le jeu et de confirmer une sélection de menu, le joueur peut remapper individuellement la touche Espace en la remplaçant par la touche Entrée dans les menus et la touche Espace en la remplaçant par la flèche vers le haut pour sauter pendant le jeu.

Le schéma de séquence suivant montre le fonctionnement de l'API setInputContext() au moment de l'exécution :

Schéma illustrant le flux du SDK Input lors du remappage des touches

Mettre à niveau

Les jeux qui utilisent des implémentations précédentes du SDK Input continuent à prendre en charge le remappage de base, sauf s'ils utilisent une configuration non compatible. Si votre jeu utilise une ancienne version du SDK Input, envisagez de lire le guide de mise à niveau de la version 0.0.4 à la version 1.0.0-beta.

La mise à niveau vers la version 1.1.1-beta offre de nouvelles fonctionnalités:

  • Déclenchement de changements de contexte
  • Réception de notifications d'événements sur les mappage de touches
  • Désactivation du remappage par action, groupe, contexte ou mappage

Installation

Le plug-in Unity v1.1.1-beta est disponible. Vous devez supprimer toutes les versions précédentes du SDK Input installé dans votre jeu et passer à la version actuelle.

Pour ajouter le SDK Input 1.1.1-beta à votre jeu, consultez Ajouter le SDK.

Définir des champs statiques

Pour la version 1.1.1-beta, il est recommandé de définir InputActions, InputGroups, InputContexts et InputMap en tant que champs statiques de la classe InputMappingProvider, car ils seront accessibles à partir d'autres sections de votre application:

#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

Mettre à jour vos actions d'entrée (InputActions)

La méthode InputAction.create() du SDK Input 1.0.0-beta est obsolète. Une InputAction possède un identifiant de version et peut être marquée comme pouvant être remappée ou non. Une InputAction définie à l'aide de la méthode create() du SDK Input 1.0.0-beta peut être remappée par défaut et ne contient pas d'informations de gestion des versions :

InputAction dans le SDK Input 1.0.0-beta

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

InputAction dans le SDK Input 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 dans le SDK Input 1.1.1-beta (avec chaîne de version)

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

Pour en savoir plus sur la gestion des versions de combinaisons de touches, consultez la section Suivi des identifiants de touches.

Mettre à jour vos groupes d'entrées (InputGroups)

Dans le SDK Input 1.1.1-beta, vous devez identifier chaque InputGroup de manière unique. Chaque InputAction appartient à un InputGroup, c'est-à-dire un ensemble d'actions associées. Cela améliore la navigation et la visibilité des commandes pendant le jeu. Tout comme une InputAction doit avoir un identifiant unique entre toutes les actions d'un même InputContext, un InputGroup doit avoir un identifiant unique entre les différents groupes.

Pour les exemples de cette section, un jeu comporte deux objets InputContext représentant le menu principal et le jeu. Les ID appropriés sont suivis pour chaque InputGroup dans ces contextes à l'aide de l'énumération suivante :

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
}

Comme pour InputAction, la méthode InputGroup.create() du SDK Input 1.0.0-beta a été abandonnée. Vous devez mettre à jour votre InputGroup dans votre jeu avec un identifiant de version et une valeur booléenne indiquant si les objets InputAction de vos groupes peuvent être remappés. Les groupes créés avec la méthode obsolète create() du SDK Input 1.0.0-beta peuvent être remappés, avoir l'ID 0, avec l'ID de version correspondant à une chaîne vide ("") :

InputGroup dans le SDK Input 1.0.0-beta

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

InputGroup dans le SDK Input 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 dans le SDK Input 1.1.1-beta (avec chaîne de version)

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

Pour en savoir plus sur la gestion des versions de combinaisons de touches, consultez la section Suivi des identifiants de touches.

Mettre à jour votre mappage des entrées (InputMap)

La méthode InputMap.create() du SDK Input 1.0.0-beta est obsolète. Mettez à jour InputMap pour attribuer un identifiant de version, désactiver complètement la fonctionnalité de remappage ou attribuer une liste de touches réservées à votre jeu que vous ne souhaitez pas que l'utilisateur remappe. Chaque InputMap défini à l'aide de la méthode create() du SDK Input 1.0.0-beta peut être remappé par défaut, est identifié par l'ID 0 et ne compte aucune touche réservée.

InputMap dans le SDK Input 1.0.0-beta

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

InputMap dans le SDK Input 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()
);

Étapes suivantes

Poursuivez la mise à niveau vers la version 1.1.1-beta en attribuant différentes commandes pour différentes scènes à l'aide d'InputContexts ou en mettant à jour l'UI de votre jeu via des notifications sur le remappage des événements reçues à l'aide d'InputRemappingListeners.

Lors de la mise à jour de vos combinaisons de touches, consultez ces bonnes pratiques, et tenez compte des restrictions et des limites de la fonctionnalité de remappage.