این راهنما نحوه انتقال بازی Unity شما را برای استفاده از جدیدترین Input SDK شرح میدهد. SDK نسخه ۱.۰.۰ بتا نسبت به پیشنمایش قبلی ۰.۰.۴ پیشرفتهای قابل توجهی داشته است. شما باید در اسرع وقت از پیشنمایشهای قبلی مهاجرت کنید. SDK نسخه ۰.۰.۴ تا مارس ۲۰۲۳ به کار خود ادامه خواهد داد.
بهروزرسانی مراجع
کلاسها پیشوند 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 اکنون به جای اینکه نیاز داشته باشد شما به صورت دستی یک 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 نیز به جای ساخت یک struct جدید، از 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();