迁移到 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();