SDK ورودی برای Unity را به نسخه 1.1 ارتقا دهید

این راهنما توضیح می دهد که چگونه بازی خود را از 1.0 به SDK ورودی 1.1 برای Unity ارتقا دهید. برای دستورالعمل های جاوا و کاتلین اینجا را کلیک کنید .

یادداشت های انتشار

بازی‌های Google Play در رایانه شخصی از نقشه‌برداری مجدد کنترل‌های صفحه‌کلید بر اساس اتصالات کلیدی که بازی شما با استفاده از Input SDK ارائه می‌کند، پشتیبانی می‌کند.

کاربران با باز کردن پوشش ، انتخاب کنترل‌ها ، و سپس کلیک کردن بر روی عملکردی که می‌خواهند دوباره نقشه‌برداری کنند، به این ویژگی دسترسی پیدا می‌کنند.

بازی‌های Google Play در رایانه شخصی، هر ورودی بازنگری شده توسط کاربر را به ورودی پیش‌فرض بازی شما نشان می‌دهد. به این ترتیب بازی شما مجبور نیست از نقشه مجدد بازیکن آگاه باشد. اگر نیاز به دانستن ورودی جدید برای یک اقدام درون بازی، مانند نمایش کنترل‌های صفحه کلید در بازی خود دارید، می‌توانید به صورت اختیاری یک تماس پاسخ ثبت کنید تا از رویدادهای نقشه‌برداری مجدد مطلع شوید.

«بازی‌های Google Play» در رایانه شخصی، کنترل‌های بازنگری‌شده کاربر را به‌صورت محلی ذخیره می‌کند تا در جلسات بازی باقی بماند. از آنجایی که این تنظیمات به صورت محلی ذخیره می‌شوند، بر تجربه تلفن همراه تأثیری نمی‌گذارند و پس از حذف بازی‌های Google Play در رایانه شخصی حذف می‌شوند. تنظیمات در چندین دستگاه رایانه شخصی وجود ندارد.

برای فعال کردن نگاشت مجدد کلید در بازی خود، نیازی به ارتقا SDK ورودی ندارید، اما در صورت شناسایی پیکربندی پشتیبانی نشده ، نقشه برداری مجدد برای بازی شما غیرفعال می شود.

اگر می‌خواهید تجربه نقشه‌برداری مجدد ورودی را کنترل کنید یا ویژگی 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() در زمان اجرا نشان می دهد:

نموداری که جریان SDK ورودی را هنگام نگاشت مجدد کلیدها نشان می دهد.

ارتقا دهید

بازی‌هایی که از پیاده‌سازی‌های قبلی 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-بتا ادامه دهید.

هنگام به روز رسانی کلیدهای صحافی خود، به بهترین شیوه ها برای طراحی اتصالات کلید خود نگاهی بیندازید و محدودیت ها و محدودیت های ویژگی نگاشت مجدد را در نظر بگیرید.