迁移到 1.0.0-beta 版输入 SDK

本指南介绍了如何迁移 Unity 游戏以使用最新的输入 SDK。与之前的 0.0.4 预览版相比,1.0.0-beta 版 SDK 实现了大量改进。您应该尽快从之前的预览版进行迁移。0.0.4 SDK 将继续运作至 2023 年 3 月。

更新引用

类已收到 Play 前缀,以避免与 Unity 出现命名冲突。只要您看到与以下内容类似的错误消息:

错误 CS0246:The type or namespace name 'InputMappingProvider' could not be found (are you missing a using directive or an assembly reference?)(找不到类型或命名空间名称“InputMappingProvider”[可能是因为未使用指令或缺少汇编引用])

就必须向类名称添加 Play 前缀。例如,将 InputMappingProvider 更改为 PlayInputMappingProvider

更新每个 InputAction

InputAction 现在是通过调用 PlayInputAction.Create 来构造的,而不是使用命名字段创建新的 struct

找到调用 new InputAction 的任何代码:

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

将其替换为对 PlayInputAction.Create 的调用:

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

更新每个 InputGroup

InputAction 类似,InputGroup 现在具有 PlayInputGroup.Create 调用,您无需手动填写 struct

也就是说,您应找到对 new InputGroup 的任何调用:

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

将其替换为对 PlayInputGroup.Create 的调用:

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

更新 InputMap

InputMap 也使用 PlayInputMap.Create,而不是构造新结构。

找到对 new InputMap 的任何调用:

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

将其替换为对 PlayInputMap.Create 的调用:

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

重命名 PlayInputMappingClient 方法

对于 PlayInputMappingClientRegisterInputMappingProvider 已重命名为 SetInputMappingProvider

因此,请找到对 RegisterInputMappingProvider 的任何调用:

Input.GetInputMappingClient().RegisterInputMappingProvider(_inputMappingProvider);

将其替换为对 SetInputMappingProvider 的调用:

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

UnregisterInputMappingProvider 也已重命名为 ClearInputMappingProvider,无需再将之前注册的 InputMappingProvider 作为参数。

找到对 UnregisterInputMappingProvider 的任何调用:

Input.GetInputMappingClient().UnregisterInputMappingProvider(_inputMapProvider);

将其替换为 ClearInputMappingProvider

PlayInput.GetInputMappingClient().ClearInputMappingProvider();