本指南會說明如何將您的 Unity 遊戲遷移至最新版的 Input SDK。與先前的 0.0.4 預先發布版相較,1.0.0 Beta SDK 在功能上有非常實質的改進。您應儘快從先前的預先發布版遷移至新版。「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
,不會建構新的結構。
找出所有呼叫 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();