本指南介绍如何迁移您的 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 方法
对于 PlayInputMappingClient
,RegisterInputMappingProvider
已重命名为 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();