本指南會說明如何將您的 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();
