En esta guía, se explica cómo actualizar tu juego de la versión 1.0 a la versión 1.1 del SDK de entrada para Unity. Haz clic aquí para obtener instrucciones sobre Java y Kotlin.
Notas de la versión
Google Play Juegos para PC admite la reasignación de los controles del teclado según las combinaciones de teclas que proporciona tu juego con el SDK de entrada.
Para acceder a esta función, los usuarios deben abrir la superposición, seleccionar los controles y hacer clic en la acción que desean reasignar.
Google Play Juegos para PC asigna todas las entradas que volvió a asignar el usuario a la entrada predeterminada del juego. De esta manera, el juego no tiene que estar al tanto de la reasignación del jugador. Si necesitas conocer la nueva entrada para una acción en el juego, como mostrar los controles del teclado, puedes registrar una devolución de llamada para que se te notifique cuando se vuelvan a asignar los eventos.
Google Play Juegos para PC almacena los controles reasignados de cada usuario de forma local para que sean persistentes en todas las sesiones. Como esta configuración se almacena de forma local, no influye en la experiencia en dispositivos móviles y se borra cuando se desinstala Google Play Juegos para PC. Las opciones de configuración no persisten en varios dispositivos de PC.
No es necesario que actualices el SDK de entrada para habilitar la reasignación de teclas en el juego, pero sí puedes inhabilitar la reasignación si se detecta una configuración no admitida.
Si deseas controlar la experiencia de reasignación de entrada o si la función está inhabilitada en tu juego, sigue estos pasos:
- Actualiza al SDK de entrada
1.1.0-beta
. - Actualiza las vinculaciones de teclas para evitar las configuraciones no admitidas.
- Actualiza tu
InputMap
para configurar la función de reasignación habilitada.
Si deseas inhabilitar la función de reasignación de tu juego y mostrar la versión de solo lectura de las vinculaciones de teclas, sigue estos pasos:
- Actualiza al SDK de entrada
1.1.0-beta
. - Actualiza tu
InputMap
para establecer la función de reasignación en inhabilitada.
Puedes actualizar tu versión del SDK de entrada a 1.1.0-beta
para aprovechar las funciones avanzadas de reasignación en Google Play Juegos para PC con InputContexts
para definir controles destinados a diferentes escenas del juego, agregar devoluciones de llamada para escuchar eventos de reasignación, definir un conjunto de teclas reservadas a las que el usuario no puede volver a asignar, además de inhabilitar la función de reasignación según InputAction
, InputGroup
o InputMap
.
Cuando realices la actualización, ten en cuenta las siguientes excepciones:
Opciones de configuración no compatibles
La reasignación de entrada se inhabilita si no se cumplen las siguientes condiciones:
Una
InputAction
que usa varias teclas debe constar de una teclas modificadora y no modificadora. Por ejemplo,Mayúsculas + A es válida, peroA + B ,Ctrl + Alt yMayúsculas + A + Tab no lo son.Dos o más objetos
InputAction
oInputGroup
no pueden compartir el mismo ID único.
Presentamos InputContext
Un elemento InputContext
permite que un juego use la misma tecla para diferentes acciones en el juego sin conflictos. De esta manera, si un juego usa la barra espaciadora para saltar durante el juego y para confirmar una selección del menú, los jugadores pueden reasignar de manera individual la
En el siguiente diagrama de secuencias, se muestra cómo funciona la API de setInputContext()
en el tiempo de ejecución:
Actualización
Los juegos que usan implementaciones anteriores del SDK de entrada aún admiten la reasignación básica, a menos que usen una configuración no admitida. Si tu juego usa una versión anterior del SDK de entrada, te recomendamos leer la guía de actualización de 0.0.4 a 1.0.0-beta.
La actualización a la versión 1.1.0-beta habilita nuevas funciones, incluidas las siguientes:
- Activar cambios de contexto
- Recibir notificaciones de eventos de asignación de teclas
- Inhabilitar la reasignación por acción, grupo, contexto o mapa
Instalación
La versión v1.1.0-beta de Unity está disponible para su uso. Debes borrar las versiones anteriores del SDK de entrada instaladas en el juego y actualizar a la versión actual.
Para agregar la versión 1.1.0-beta del SDK de entrada a tu juego, consulta Cómo agregar el SDK.
Cómo definir campos estáticos
Para la versión 1.1.0-beta, se recomienda definir los objetos InputActions
, InputGroups
, InputContexts
y InputMap
como campos estáticos de tu clase InputMappingProvider
, ya que se puede acceder a estos campos desde otras partes de la aplicación:
#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
Cómo actualizar tus InputActions
El método InputAction.create()
del SDK de entrada 1.0.0-beta
dejó de estar disponible. Una InputAction
ahora tiene un identificador de versión y se puede marcar como reasignable o no. Una InputAction
definida con el método create()
de 1.0.0-beta
del SDK de entrada se puede reasignar de forma predeterminada y carece de información sobre el control de versiones:
InputAction en el SDK de entrada 1.0.0-beta
var driveAction = PlayInputAction.Create(
"Drive",
(long)InputEventIds.DRIVE,
PlayInputControls.Create(
new[] { AndroidKeyCode.KEYCODE_SPACE },
new List<PlayMouseAction>()
)
);
InputAction en el SDK de entrada 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 en el SDK de entrada 1.1.0-beta (con string de versión)
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
);
Para obtener más información sobre el control de versiones de tus vinculaciones de teclas, consulta Cómo realizar un seguimiento de los ID de teclas.
Cómo actualizar tus InputInputs
En el SDK de entrada 1.1.0-beta
, debes identificar cada InputGroup
de forma única. Cada InputAction
pertenece a InputGroup
, una colección de acciones relacionadas. Esto mejora la navegación y la visibilidad de los controles durante el juego. De la misma manera que InputAction
debe tener un identificador único entre todas las acciones de un solo InputContext
, un InputGroup
debe tener un ID único en todo los grupos existentes.
Para los ejemplos de esta sección, un juego tiene dos objetos InputContext
que representan el menú principal y el juego. Se realiza un seguimiento de los IDs adecuados para cada InputGroup
en estos contextos a través de la siguiente enumeración:
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
}
Al igual que InputAction
, dejó de estar disponible el método InputGroup.create()
del SDK de entrada 1.0.0-beta
. Debes actualizar el objeto InputGroup
de tu juego con un identificador de versión y un valor booleano que indique si los objetos InputAction
de tus grupos son reasignables. Los grupos creados con el método create()
del SDK de entrada 1.0.0-beta
que dejó de estar disponible son reasignables, tienen el ID 0 y el ID de versión es una string vacía (""
):
InputGroup en el SDK de entrada 1.0.0-beta
var gameInputGroup = PlayInputGroup.Create(
"Road controls",
new List<PlayInputAction>
{
driveAction,
turboAction,
openGarageAction,
openPgsAction,
openStoreAction
}
);
InputGroup en el SDK de entrada 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 en el SDK de entrada 1.1.0-beta (con string de versión)
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
);
Para obtener más información sobre el control de versiones de tus vinculaciones de teclas, consulta Cómo realizar un seguimiento de los ID de teclas.
Cómo actualizar tu InputMap
El método InputMap.create()
del SDK de entrada 1.0.0-beta
dejó de estar disponible. Actualiza tu InputMap
para asignar un identificador de versión, inhabilitar por completo la función de reasignación o asignar una lista de teclas reservadas para tu juego que no deseas que el usuario vuelva a asignar. Cada InputMap
definido con el método create()
del SDK de entrada 1.0.0-beta
se puede volver a asignar de forma predeterminada, se identifica con el ID 0
y no tiene ninguna tecla reservada.
InputMap en el SDK de entrada 1.0.0-beta
var gameInputMap = PlayInputMap.Create(
new List<PlayInputGroup>
{
gameInputGroup,
menuInputGroup
},
PlayMouseSettings.Create(false, false)
);
InputMap en el SDK de entrada 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()
);
Próximos pasos
Continúa con la actualización a la versión 1.1.0-beta. Para ello, asigna distintos controles para diferentes escenas mediante InputContexts
o actualiza la IU del juego para recibir notificaciones sobre los eventos de asignación con InputRemappingListeners
.
Cuando actualices tus vinculaciones de teclas, consulta las prácticas recomendadas para diseñar vinculaciones de teclas y ten en cuenta las restricciones y limitaciones de la función de reasignación.