Chuyển sang SDK Input 1.0.0-beta

Hướng dẫn này mô tả cách di chuyển trò chơi Unity của bạn để sử dụng SDK Input mới nhất. SDK 1.0.0-beta có những cải tiến đáng kể so với bản xem trước 0.0.4 trước đó. Bạn nên di chuyển từ các bản xem trước trước đó sớm nhất có thể. SDK 0.0.4 sẽ tiếp tục hoạt động đến hết tháng 3 năm 2023.

Cập nhật tài liệu tham khảo

Các lớp sẽ nhận được tiền tố Play để tránh tình trạng xung đột tên với Unity. Bất cứ khi nào bạn thấy một thông báo lỗi tương tự như:

lỗi CS0246: Không tìm thấy loại hoặc không gian tên "InputMappingProvider" (liệu bạn có đang thiếu lệnh tham chiếu hay một tổ hợp tham chiếu không?)

bạn phải thêm tiền tố Play vào tên lớp. Ví dụ: InputMappingProvider trở thành PlayInputMappingProvider.

Cập nhật từng InputAction

InputAction hiện được tạo bằng một lệnh gọi PlayInputAction.Create thay vì tạo struct mới với các trường đã được đặt tên.

Định vị mọi đoạn mã gọi new InputAction:

var driveAction = new InputAction
{
    ActionLabel = "Drive",
    UniqueId = (int)InputEventIds.DRIVE,
    InputControls = new InputControls
    {
        AndroidKeycodes = new[] { AndroidKeyCode.KEYCODE_SPACE }
    }
};

Sau đó thay thế chúng bằng một lệnh gọi đến PlayInputAction.Create:

var driveAction = PlayInputAction.Create(
    "Drive",
    (int)InputEventIds.DRIVE,
    PlayInputControls.Create(
        new[] { AndroidKeyCode.KEYCODE_SPACE },
        null
    )
);

Cập nhật từng InputGroup

Giống như InputAction, InputGroup hiện có lệnh gọi PlayInputGroup.Create thay vì yêu cầu bạn điền struct theo cách thủ công.

Điều này có nghĩa là bạn nên xác định vị trí của mọi lệnh gọi đến new InputGroup:

var gameInputGroup = new InputGroup
{
    GroupLabel = "Game controls",
    InputActions = new List<InputAction>
    {
        driveAction,
        turboAction,
        openGarageAction,
        openStoreAction
    }
};

Sau đó thay thế chúng bằng một lệnh gọi đến PlayInputGroup.Create:

var gameInputGroup = PlayInputGroup.Create(
    "Game controls",
    new List<PlayInputAction>
    {
        driveAction,
        turboAction,
        openGarageAction,
        openStoreAction
    }
);

Cập nhật InputMap

InputMap cũng sử dụng PlayInputMap.Create thay vì tạo một cấu trúc mới.

Định vị mọi lệnh gọi đến new InputMap:

return new InputMap
{
    InputGroups = new List<InputGroup>
    {
        gameInputGroup,
        menuInputGroup
    },
    MouseSettings = new MouseSettings
    {
        AllowMouseSensitivityAdjustment = false,
        InvertMouseMovement = false
    }
};

Sau đó thay thế chúng bằng một lệnh gọi đến PlayInputMap.Create:

return PlayInputMap.Create(
    new List<PlayInputGroup>
    {
        gameInputGroup,
        menuInputGroup
    },
    PlayMouseSettings.Create(false, false)
);

Đổi tên phương thức PlayInputMappingClient

Đối với PlayInputMappingClient, RegisterInputMappingProvider đã được đổi tên thành SetInputMappingProvider.

Vì vậy, hãy xác định vị trí mọi lệnh gọi đến RegisterInputMappingProvider:

Input.GetInputMappingClient().RegisterInputMappingProvider(_inputMappingProvider);

Sau đó thay thế chúng bằng một lệnh gọi đến SetInputMappingProvider:

PlayInputMappingClient inputMappingClient =
    Google.Play.InputMapping.PlayInput.GetInputMappingClient();
inputMappingClient.SetInputMappingProvider(_inputMapProvider);

UnregisterInputMappingProvider cũng đã được đổi tên thành ClearInputMappingProvider, đồng thời không còn yêu cầu tham số InputMappingProvider mà bạn đã đăng ký trước đó nữa.

Định vị mọi lệnh gọi đến UnregisterInputMappingProvider:

Input.GetInputMappingClient().UnregisterInputMappingProvider(_inputMapProvider);

Và thay thế chúng bằng ClearInputMappingProvider:

PlayInput.GetInputMappingClient().ClearInputMappingProvider();