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.0-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.0-beta
. - Mettez à jour votre
InputMap
pour définir la fonctionnalité de remappage comme désactivée.
Vous pouvez mettre à niveau le SDK Input et installer la version 1.1.0-beta
pour bénéficier des fonctionnalités de remappage avancées de Google Play Jeux sur PC. Pour cela, utilisez InputContexts
afin de définir les commandes pour 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, maisA+B ,Ctrl+Alt etMaj+A+Tabulation ne le sont pas.Deux objets
InputAction
ouInputGroup
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
Le schéma de séquence suivant montre le fonctionnement de l'API setInputContext()
au moment de l'exécution :
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.0-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.0-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.0-beta à votre jeu, consultez Ajouter le SDK.
Définir des champs statiques
Pour la version 1.1.0-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.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 dans le SDK Input 1.1.0-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.0-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.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 dans le SDK Input 1.1.0-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.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()
);
Étapes suivantes
Poursuivez la mise à niveau vers la version 1.1.0-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.