遷移至 1.0.0 Beta Input SDK

本指南會說明如何將您的 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 方法

對於 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();