Cómo migrar al SDK de entrada 1.0.0-beta

En esta guía, se describe cómo migrar tu juego de Unity para usar el SDK de entrada más reciente. El SDK 1.0.0-beta presenta mejoras importantes con respecto a la vista previa 0.0.4 anterior. Debes migrar de las vistas previas anteriores lo antes posible. El SDK 0.0.4 seguirá funcionando hasta marzo de 2023.

Actualiza las referencias

Las clases recibieron el prefijo Play para evitar conflictos de nombres con Unity. Cuando veas un mensaje de error similar a este:

error CS0246: No se pudo encontrar el tipo o el nombre del espacio de nombres "InputMappingProvider" (¿falta una directiva de uso o una referencia de Assembly?)

debes agregar el prefijo Play al nombre de la clase. Por ejemplo, InputMappingProvider se convierte en PlayInputMappingProvider.

Actualiza cada InputAction

Ahora, InputAction se construye con una llamada a PlayInputAction.Create, en lugar de crear una struct nueva con campos con nombre.

Ubica cualquier código que llame a new InputAction:

var driveAction = new InputAction
{
    ActionLabel = "Drive",
    UniqueId = (int)InputEventIds.DRIVE,
    InputControls = new InputControls
    {
        AndroidKeycodes = new[] { AndroidKeyCode.KEYCODE_SPACE }
    }
};

Y reemplázalo por una llamada a PlayInputAction.Create:

var driveAction = PlayInputAction.Create(
    "Drive",
    (int)InputEventIds.DRIVE,
    PlayInputControls.Create(
        new[] { AndroidKeyCode.KEYCODE_SPACE },
        null
    )
);

Actualiza cada InputGroup

Al igual que InputAction, InputGroup ahora tiene una llamada a PlayInputGroup.Create, en lugar de requerir que completes un struct de forma manual.

Esto significa que debes ubicar todas las llamadas a new InputGroup:

var gameInputGroup = new InputGroup
{
    GroupLabel = "Game controls",
    InputActions = new List<InputAction>
    {
        driveAction,
        turboAction,
        openGarageAction,
        openStoreAction
    }
};

Y reemplazarlas por una llamada a PlayInputGroup.Create:

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

Actualiza el InputMap

InputMap también usa PlayInputMap.Create en lugar de construir una estructura nueva.

Ubica las llamadas a new InputMap:

return new InputMap
{
    InputGroups = new List<InputGroup>
    {
        gameInputGroup,
        menuInputGroup
    },
    MouseSettings = new MouseSettings
    {
        AllowMouseSensitivityAdjustment = false,
        InvertMouseMovement = false
    }
};

Y reemplázalas por una llamada a PlayInputMap.Create:

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

Cambia el nombre de los métodos de PlayInputMappingClient

En PlayInputMappingClient, se cambió el nombre de RegisterInputMappingProvider a SetInputMappingProvider.

Por lo tanto, busca las llamadas a RegisterInputMappingProvider:

Input.GetInputMappingClient().RegisterInputMappingProvider(_inputMappingProvider);

Y reemplázalas por una llamada a SetInputMappingProvider:

PlayInputMappingClient inputMappingClient =
    Google.Play.InputMapping.PlayInput.GetInputMappingClient();
inputMappingClient.SetInputMappingProvider(_inputMapProvider);

También se cambió el nombre de UnregisterInputMappingProvider por ClearInputMappingProvider y ya no se requiere el InputMappingProvider registrado anteriormente como parámetro.

Ubica las llamadas a UnregisterInputMappingProvider:

Input.GetInputMappingClient().UnregisterInputMappingProvider(_inputMapProvider);

Y reemplázalas por ClearInputMappingProvider:

PlayInput.GetInputMappingClient().ClearInputMappingProvider();