迁移到 1.0.0-beta 输入 SDK

本指南介绍如何迁移您的 Unity 游戏以使用最新的输入 SDK。1.0.0-beta SDK 在之前的0.0.4 预览版基础上进行了重大改进。您应尽快从早期预览版迁移。0.0.4 SDK 将继续运行到 2023 年 3 月。

更新引用

类已收到 Play 前缀,以避免与 Unity 发生命名冲突。每当您看到类似以下内容的错误消息时

错误 CS0246:找不到类型或命名空间名称“InputMappingProvider”(您是否缺少 using 指令或程序集引用?)

您必须将 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,而不是构造新的 struct。

找到任何对 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();