انتقال به نسخه Input SDK 1.0.0-beta

این راهنما نحوه انتقال بازی Unity برای استفاده از جدیدترین Input SDK را شرح می‌دهد. کیت توسعه نرم‌افزار 1.0.0-beta نسبت‌به پیش‌نمایش قبلی 0.0.4 بهبودهای قابل‌توجهی داشته است. باید در اسرع وقت از پیش‌نمایش‌های قبلی مهاجرت کنید. کیت توسعه نرم‌افزار 0.0.4 تا مارس ۲۰۲۳ به کار خود ادامه خواهد داد.

به‌روزرسانی مرجع‌ها

کلاس‌ها پیشوند Play را دریافت کردند تا از تداخل نام‌گذاری با Unity جلوگیری شود. هرگاه پیام خطایی مشابه موارد زیر دیدید:

error CS0246: The type or namespace name 'InputMappingProvider' could not be found (are you missing a using directive or an assembly reference?)

باید پیشوند 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 اکنون به‌جای اینکه از شما بخواهد struct را به‌صورت دستی تکمیل کنید، یک فراخوانی PlayInputGroup.Create دارد.

این یعنی باید هرگونه تماس با 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();