این راهنما توضیح می دهد که چگونه بازی خود را از 1.0 به SDK ورودی 1.1 برای Unity ارتقا دهید. برای دستورالعمل های جاوا و کاتلین اینجا را کلیک کنید .
یادداشت های انتشار
بازیهای Google Play در رایانه شخصی از نقشهبرداری مجدد کنترلهای صفحهکلید بر اساس اتصالات کلیدی که بازی شما با استفاده از Input SDK ارائه میکند، پشتیبانی میکند.
کاربران با باز کردن پوشش ، انتخاب کنترلها ، و سپس کلیک کردن بر روی عملکردی که میخواهند دوباره نقشهبرداری کنند، به این ویژگی دسترسی پیدا میکنند.
بازیهای Google Play در رایانه شخصی، هر ورودی بازنگری شده توسط کاربر را به ورودی پیشفرض بازی شما نشان میدهد. به این ترتیب بازی شما مجبور نیست از نقشه مجدد بازیکن آگاه باشد. اگر نیاز به دانستن ورودی جدید برای یک اقدام درون بازی، مانند نمایش کنترلهای صفحه کلید در بازی خود دارید، میتوانید به صورت اختیاری یک تماس پاسخ ثبت کنید تا از رویدادهای نقشهبرداری مجدد مطلع شوید.
«بازیهای Google Play» در رایانه شخصی، کنترلهای بازنگریشده کاربر را بهصورت محلی ذخیره میکند تا در جلسات بازی باقی بماند. از آنجایی که این تنظیمات به صورت محلی ذخیره میشوند، بر تجربه تلفن همراه تأثیری نمیگذارند و پس از حذف بازیهای Google Play در رایانه شخصی حذف میشوند. تنظیمات در چندین دستگاه رایانه شخصی وجود ندارد.
برای فعال کردن نگاشت مجدد کلید در بازی خود، نیازی به ارتقا SDK ورودی ندارید، اما در صورت شناسایی پیکربندی پشتیبانی نشده ، نقشه برداری مجدد برای بازی شما غیرفعال می شود.
اگر میخواهید تجربه نقشهبرداری مجدد ورودی را کنترل کنید یا ویژگی remapping برای بازی شما غیرفعال است، این مراحل را دنبال کنید:
- به Input SDK
1.1.1-beta
ارتقا دهید. - برای جلوگیری از پیکربندیهای پشتیبانینشده، کلیدهای اتصال را بهروزرسانی کنید.
-
InputMap
خود را به روز کنید تا ویژگی remapping را فعال کنید.
اگر میخواهید از ویژگی remapping برای بازی خود انصراف دهید در حالی که هنوز نسخه فقط خواندنی پیوندهای کلید خود را نمایش میدهید، این مراحل را دنبال کنید:
- به Input SDK
1.1.1-beta
ارتقا دهید. -
InputMap
خود را بهروزرسانی کنید تا ویژگی نقشهبرداری مجدد غیرفعال شود.
میتوانید نسخه Input SDK خود را به 1.1.1-beta
ارتقا دهید تا با استفاده از InputContexts
، کنترلهایی را برای صحنههای مختلف بازی خود تعریف کنید، برای گوش دادن به رویدادهای نقشهبرداری مجدد، تعریف کنید. مجموعهای از کلیدهای رزرو شده که کاربر نمیتواند بهازای هر InputAction
، InputGroup
یا InputMap
ویژگی نقشهبرداری مجدد را مجدداً به آنها نگاشت و غیرفعال کند.
هنگام ارتقاء، استثنائات زیر را در نظر بگیرید:
تنظیمات پشتیبانی نشده
در صورت عدم رعایت شرایط زیر، نقشهبرداری مجدد ورودی غیرفعال میشود:
یک
InputAction
که از کلیدهای چندگانه استفاده می کند باید از یک کلید اصلاح کننده و غیر اصلاح کننده تشکیل شده باشد. به عنوان مثال،Shift + A معتبر است اماA + B ،Ctrl + Alt ، وShift + A + Tab نامعتبر استدو یا چند شیء
InputAction
یاInputGroup
نمی توانند شناسه منحصر به فرد یکسانی را به اشتراک بگذارند.
معرفی InputContext
یک InputContext
به یک بازی اجازه می دهد تا از کلید یکسانی برای اقدامات مختلف در بازی شما بدون درگیری استفاده کند. به این ترتیب، اگر یک بازی از فضا برای پرش در حین گیم پلی و برای تأیید انتخاب منو استفاده کند، بازیکنان می توانند به صورت جداگانه نقشه برداری کنند.
نمودار توالی زیر نحوه عملکرد API setInputContext()
در زمان اجرا نشان می دهد:
ارتقا دهید
بازیهایی که از پیادهسازیهای قبلی Input SDK استفاده میکنند، همچنان از نگاشت مجدد اولیه پشتیبانی میکنند، مگر اینکه از پیکربندی پشتیبانینشده استفاده کنند. اگر بازی شما از نسخه قدیمیتری از Input SDK استفاده میکند، راهنمای ارتقا را از 0.0.4 به 1.0.0-بتا بخوانید.
ارتقاء به 1.1.1-بتا ویژگی های جدیدی را فعال می کند، از جمله:
- ایجاد تغییرات زمینه
- دریافت اعلان رویدادهای نقشه برداری کلیدی
- غیرفعال کردن نقشه برداری مجدد در هر اقدام، گروه، زمینه یا نقشه.
نصب و راه اندازی
افزونه Unity v1.1.1-beta برای استفاده شما در دسترس است. باید تمامی نسخه های قبلی Input SDK نصب شده در بازی خود را حذف کرده و به نسخه فعلی ارتقا دهید.
برای افزودن Input SDK v1.1.1-beta به بازی خود، به افزودن SDK مراجعه کنید.
فیلدهای ثابت را تعریف کنید
برای نسخه 1.1.1-بتا، تمرین خوبی است که InputActions
، InputGroups
، InputContexts
و InputMap
خود را به عنوان فیلدهای ثابت کلاس InputMappingProvider
خود تعریف کنید، زیرا این فیلدها از قسمت های دیگر برنامه شما قابل دسترسی خواهند بود:
#if PLAY_GAMES_PC
using Java.Lang;
using Java.Util;
using Google.Android.Libraries.Play.Games.Inputmapping;
using Google.Android.Libraries.Play.Games.Inputmapping.Datamodel;
public class InputSDKMappingProvider : InputMappingProviderCallbackHelper
{
public static readonly string INPUT_MAP_VERSION = "1.0.0";
private static readonly InputAction driveInputAction =
InputAction.Create(...);
private static readonly InputGroup roadInputGroup = InputGroup.Create(...);
public static readonly InputContext roadControlsContext =
InputContext.Create(...);
public static readonly InputMap inputMap = InputMap.Create(...);
public override InputMap OnProvideInputMap()
{
return inputMap;
}
}
#endif
InputActions خود را به روز کنید
روش InputAction.create()
از Input SDK 1.0.0-beta
منسوخ شده است. یک InputAction
یک شناسه نسخه دارد و می تواند به عنوان قابل استفاده مجدد یا غیر قابل استفاده مجدد علامت گذاری شود. یک InputAction
تعریف شده با استفاده از روش Input SDK 1.0.0-beta
create()
به طور پیشفرض قابل استفاده مجدد است و فاقد اطلاعات نسخهسازی است:
InputAction در Input SDK 1.0.0-beta
var driveAction = PlayInputAction.Create(
"Drive",
(long)InputEventIds.DRIVE,
PlayInputControls.Create(
new[] { AndroidKeyCode.KEYCODE_SPACE },
new List<PlayMouseAction>()
)
);
InputAction در Input SDK 1.1.1-beta
private static readonly InputAction driveInputAction = InputAction.Create(
"Drive",
(long)InputEventIds.DRIVE,
InputControls.Create(
new[] { new Integer(AndroidKeyCode.KEYCODE_SPACE) }.ToJavaList(),
new ArrayList<Integer>()),
InputEnums.REMAP_OPTION_ENABLED
);
InputAction در Input SDK 1.1.1-beta (با رشته نسخه)
private static readonly InputAction driveInputAction = InputAction.Create(
"Drive",
InputControls.Create(
new[] { new Integer(AndroidKeyCode.KEYCODE_SPACE) }.ToJavaList(),
new ArrayList<Integer>()),
InputIdentifier.Create(
INPUT_MAP_VERSION, (long)InputEventIds.DRIVE),
InputEnums.REMAP_OPTION_ENABLED
);
برای اطلاعات بیشتر در مورد نسخهسازی اتصالات کلید، به ردیابی شناسههای کلید مراجعه کنید.
InputGroups خود را به روز کنید
در Input SDK 1.1.1-beta
باید هر InputGroup
به طور منحصر به فرد شناسایی کنید. هر InputAction
متعلق به یک InputGroup
است -- مجموعه ای از اقدامات مرتبط. این امر ناوبری و قابلیت کشف کنترل ها را در طول بازی بهبود می بخشد. همانطور که یک InputAction
باید یک شناسه منحصر به فرد در بین تمام اقدامات در یک InputContext
داشته باشد، یک InputGroup
باید یک شناسه منحصر به فرد در بین گروه های موجود داشته باشد.
برای مثالهای این بخش، یک بازی دارای دو شیء InputContext
است که منوی اصلی و گیمپلی را نشان میدهد. شناسه های مناسب برای هر InputGroup
در این زمینه ها با استفاده از شمارش زیر ردیابی می شوند:
public enum InputGroupsIds
{
// Main menu scene
BASIC_NAVIGATION, // WASD, Enter, Backspace
MENU_ACTIONS, // C: chat, Space: quick game, S: store
// Gameplay scene
BASIC_MOVEMENT, // WASD, space: jump, Shift: run
MOUSE_ACTIONS, // Left click: shoot, Right click: aim
EMOJIS, // Emojis with keys 1,2,3,4 and 5
GAME_ACTIONS, // M: map, P: pause, R: reload
}
مانند InputAction
، روش InputGroup.create()
Input SDK 1.0.0-beta
منسوخ شده است. شما باید InputGroup
خود را در بازی خود با یک شناسه نسخه و Boolean به روز کنید که نشان می دهد آیا اشیاء InputAction
در گروه های شما قابل استفاده مجدد هستند یا خیر. گروههایی که با روش منسوخ شده Input SDK 1.0.0-beta
create()
ایجاد شدهاند، قابل استفاده مجدد هستند، شناسه 0 دارند و شناسه نسخه یک رشته خالی است ( ""
):
InputGroup در Input SDK 1.0.0-beta
var gameInputGroup = PlayInputGroup.Create(
"Road controls",
new List<PlayInputAction>
{
driveAction,
turboAction,
openGarageAction,
openPgsAction,
openStoreAction
}
);
InputGroup در Input SDK 1.1.1-beta
private static readonly InputGroup roadInputGroup = InputGroup.Create(
"Road controls",
new[]
{
driveInputAction,
turboInputAction,
openGarageInputAction,
openPgsInputAction,
openStoreInputAction,
}.ToJavaList(),
(long)InputGroupsIds.ROAD_CONTROLS,
// All input actions of this group will be remappable unless specified
// the contrary by the individual input actions.
InputEnums.REMAP_OPTION_ENABLED
);
InputGroup در Input SDK 1.1.1-beta (با رشته نسخه)
private static readonly InputGroup roadInputGroup = InputGroup.Create(
"Road controls",
new[]
{
driveInputAction,
turboInputAction,
openGarageInputAction,
openPgsInputAction,
openStoreInputAction,
}.ToJavaList(),
InputIdentifier.Create(
INPUT_MAP_VERSION, (long)InputGroupsIds.ROAD_CONTROLS),
// All input actions of this group will be remappable unless specified
// the contrary by the individual input actions.
InputEnums.REMAP_OPTION_ENABLED
);
برای اطلاعات بیشتر در مورد نسخهسازی اتصالات کلید، به ردیابی شناسههای کلید مراجعه کنید.
InputMap خود را به روز کنید
روش InputMap.create()
Input SDK 1.0.0-beta
منسوخ شده است. InputMap
خود را بهروزرسانی کنید تا یک شناسه نسخه اختصاص دهید، به طور کامل از ویژگی remapping انصراف دهید یا فهرستی از کلیدهای رزرو شده را برای بازی خود اختصاص دهید که نمیخواهید برای نقشهبرداری مجدد توسط کاربر استفاده شود. هر InputMap
تعریف شده با استفاده از روش Input SDK 1.0.0-beta
create()
به طور پیشفرض قابل استفاده مجدد است، با شناسه 0
شناسایی میشود و هیچ کلید رزروی ندارد.
InputMap در Input SDK 1.0.0-beta
var gameInputMap = PlayInputMap.Create(
new List<PlayInputGroup>
{
gameInputGroup,
menuInputGroup
},
PlayMouseSettings.Create(false, false)
);
InputMap در Input SDK 1.1.1-beta
public static readonly string INPUT_MAP_VERSION = "1.0.0";
public static readonly long INPUT_MAP_ID = 0;
public static readonly InputMap inputMap = InputMap.Create(
new[] { roadInputGroup, menuInputGroup }.ToJavaList(),
MouseSettings.Create(false, false),
InputIdentifier.Create(INPUT_MAP_VERSION, INPUT_MAP_ID),
// Use ESC as reserved key
InputEnums.REMAP_OPTION_ENABLED,
new[]
{
InputControls.Create(new[]
{
new Integer(AndroidKeyCode.KEYCODE_ESCAPE)
}.ToJavaList(),
new ArrayList<Integer>())
}.ToJavaList()
);
بعدش چی
با اختصاص دادن کنترلهای مختلف برای صحنههای مختلف با استفاده از InputContexts
یا بهروزرسانی رابط کاربری بازیتان با دریافت اطلاعرسانی در مورد نقشهبرداری مجدد رویدادها با استفاده از InputRemappingListeners
، ارتقا خود را به نسخه 1.1.1-بتا ادامه دهید.
هنگام به روز رسانی کلیدهای صحافی خود، به بهترین شیوه ها برای طراحی اتصالات کلید خود نگاهی بیندازید و محدودیت ها و محدودیت های ویژگی نگاشت مجدد را در نظر بگیرید.