本指南介绍了如何迁移 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 方法
对于 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();