SDK ورودی جاوا و کاتلین را به نسخه 1.1 ارتقا دهید

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

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

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

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

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

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

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

اگر می‌خواهید تجربه نقشه‌برداری مجدد ورودی را کنترل کنید، یا اگر ویژگی نقشه‌برداری مجدد برای بازی شما غیرفعال است، مراحل زیر را برای حل کردن انجام دهید:

  • به Input SDK 1.1.1-beta ارتقا دهید.
  • برای جلوگیری از پیکربندی‌های پشتیبانی‌نشده، کلیدهای اتصال را به‌روزرسانی کنید.
  • InputMap خود را به روز کنید تا ویژگی remapping را فعال کنید.

اگر می‌خواهید از ویژگی remapping برای بازی خود انصراف دهید در حالی که هنوز نسخه فقط خواندنی پیوندهای کلید خود را نمایش می‌دهید، این مراحل را دنبال کنید:

  • به Input SDK 1.1.1-beta ارتقا دهید.
  • InputMap خود را به روز کنید تا ویژگی remapping را غیرفعال کنید.

می‌توانید نسخه Input SDK خود را به 1.1.1-beta ارتقا دهید تا با استفاده از InputContexts ، کنترل‌هایی را برای صحنه‌های مختلف بازی خود تعریف کنید، برای گوش دادن به رویدادهای نقشه‌برداری مجدد، تعریف کنید. مجموعه‌ای از کلیدهای رزرو شده که کاربر نمی‌تواند مجدداً روی آن‌ها نقشه‌برداری کند و ویژگی نگاشت مجدد را در هر InputAction ، InputGroup یا InputMap غیرفعال کند.

در حین ارتقاء به نسخه جدید SDK، استثناهای زیر را در نظر بگیرید:

تنظیمات پشتیبانی نشده

در صورت عدم رعایت شرایط زیر، نگاشت مجدد ورودی غیرفعال می شود:

  • یک InputAction که از چندین کلید استفاده می کند باید از یک کلید اصلاح کننده و غیر اصلاح کننده تشکیل شده باشد. به عنوان مثال، Shift + A معتبر است اما A + B ، Ctrl + Alt ، و Shift + A + Tab نیستند.

  • دو یا چند شیء InputAction یا InputGroup نمی توانند شناسه منحصر به فرد یکسانی را به اشتراک بگذارند.

ارتقا دهید

Input SDK 1.1.1-beta با Input SDK 1.0.0-beta سازگار است. بازی‌هایی که از پیاده‌سازی‌های قبلی Input SDK استفاده می‌کنند، همچنان از نگاشت مجدد اولیه پشتیبانی می‌کنند، مگر اینکه از پیکربندی پشتیبانی‌نشده استفاده کنند. اگر بازی شما از نسخه قبلی Input SDK استفاده می کند، راهنمای ارتقا را از 0.0.4 به 1.0.0-بتا بخوانید.

ارتقاء به 1.1.1-بتا ویژگی های جدیدی را فعال می کند از جمله:

ارتقاء وابستگی

اگر از Gradle برای وارد کردن Input SDK استفاده می‌کنید، به جدیدترین نسخه ارتقا دهید:

// build.gradle
dependencies {
   ...
   implementation 'com.google.android.libraries.play.games:inputmapping:1.1.1-beta'
   ...
}

فیلدهای ثابت را تعریف کنید

برای نسخه 1.1.1-beta این یک تمرین خوب است که اشیاء InputAction ، InputGroup ، InputContext و InputMap را به عنوان فیلدهای ثابت کلاس InputMappingProvider خود تعریف کنید، زیرا این فیلدها از قسمت های دیگر برنامه شما قابل دسترسی هستند:

کاتلین

class InputSDKProvider : InputMappingProvider {
    override fun onProvideInputMap(): InputMap { return gameInputMap }

    companion object {
        const val INPUTMAP_VERSION = "1.0.0"

        private val moveUpInputAction = InputAction.create(...)
        private val movementInputGroup = InputGroup.create(...)
        val menuContext = InputContext.create(...)
        val gameInputMap = InputMap.create(...)
    }
}

جاوا

public class MyInputMappingProvider implements InputMappingProvider {
    private static final String INPUTMAP_VERSION = "1.0.0";

    private static final InputAction moveUpInputAction =
        InputAction.create(...);
    private static final InputGroup movementInputGroup = InputGroup.create(...);
    public static final InputContext menuContext = InputContext.create(...);
    public static final InputMap gameInputMap = InputMap.create(...);

    @Override
    public InputMap onProvideInputMap() {
        return gameInputMap;
    }
}

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

کاتلین

val jumpInputAction = InputAction.create(
    "Jump",
    InputEventIds.JUMP.id,
    InputControls.create(
        listOf(KeyEvent.KEYCODE_SPACE),
        emptyList()
    )
)

جاوا

InputAction moveUpInputAction = InputAction.create(
    "Move Up",
    InputEventIds.MOVE_UP.ordinal(),
    InputControls.create(
        Collections.singletonList(KeyEvent.KEYCODE_W),
        Collections.emptyList()
    )
);

InputAction در Input SDK 1.1.1-beta

کاتلین

companion object {
  private val moveUpInputAction = InputAction.create(
    "Move Up",
    InputActionsIds.DRIVE.ordinal.toLong(),
    InputControls.create(listOf(KeyEvent.KEYCODE_W), emptyList()),
    InputEnums.REMAP_OPTION_ENABLED) // This action is remappable
}

جاوا

private static final InputAction moveUpInputAction = InputAction.create(
    "Move Up",
    InputEventIds.MOVE_UP.ordinal(),
    InputControls.create(
            Collections.singletonList(KeyEvent.KEYCODE_W),
            Collections.emptyList()),
    InputEnums.REMAP_OPTION_ENABLED // this action is remappable
);

InputAction در Input SDK 1.1.1-beta (با رشته نسخه)

کاتلین

private val enterMenuInputAction = InputAction.create(
    "Enter menu",
    InputControls.create(listOf(KeyEvent.KEYCODE_ENTER), emptyList()),
    InputIdentifier.create(
    INPUTMAP_VERSION, InputActionsIds.ENTER_MENU.ordinal.toLong()),
    InputEnums.REMAP_OPTION_ENABLED
)

جاوا

private static final InputAction moveUpInputAction = InputAction.create(
    "Move Up",
    InputControls.create(
            Collections.singletonList(KeyEvent.KEYCODE_W),
            Collections.emptyList()),
    InputIdentifier.create(
            INPUTMAP_VERSION,
            InputEventIds.MOVE_UP.ordinal()),
    InputEnums.REMAP_OPTION_ENABLED // this action is remappable
);

برای اطلاعات بیشتر در مورد نسخه‌سازی اتصالات کلید، به ردیابی شناسه‌های کلید مراجعه کنید.

InputGroups خود را به روز کنید

در Input SDK 1.1.1-beta باید هر InputGroup به طور منحصر به فرد شناسایی کنید. هر InputAction متعلق به یک InputGroup است -- مجموعه ای از اقدامات مرتبط. این امر ناوبری و قابلیت کشف کنترل ها را در طول بازی بهبود می بخشد. همانطور که InputAction باید یک شناسه منحصر به فرد در بین تمام اقدامات در یک InputContext داشته باشد، یک InputGroup باید یک شناسه منحصر به فرد در بین گروه های موجود داشته باشد.

برای مثال‌های این بخش، یک بازی دارای دو شیء InputContext است که منوی اصلی و گیم‌پلی را نشان می‌دهد. شناسه های مناسب برای هر InputGroup در این زمینه ها با استفاده از شمارش زیر ردیابی می شوند:

کاتلین

enum class 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
}

جاوا

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

کاتلین

val movementInputGroup = InputGroup.create(
    "Basic Movement",
    listOf(
        moveUpInputAction,
        moveLeftInputAction,
        moveDownInputAction,
        moveRightInputAction,
        jumpInputAction,
        runInputAction)
)

جاوا

InputGroup movementInputGroup = InputGroup.create(
    "Basic movement",
    Arrays.asList(
        moveUpInputAction,
        moveLeftInputAction,
        moveDownInputAction,
        moveRightInputAction,
        jumpInputAction,
        runInputAction
    )
);

InputGroup در Input SDK 1.1.1-beta

کاتلین

companion object {
    private val movementInputGroup = InputGroup.create(
        "Basic movement",
        listOf(
            moveUpInputAction,
            moveLeftInputAction,
            moveDownInputAction,
            moveRightInputAction,
            jumpInputAction,
            runInputAction),
        InputGroupsIds.BASIC_MOVEMENT.ordinal.toLong(),
        // All the actions in this groups can't be remapped
        InputEnums.REMAP_OPTION_DISABLED
    )
}

جاوا

private static final InputGroup movementInputGroup = InputGroup.create(
    "Basic movement",
    Arrays.asList(
            moveUpInputAction,
            moveLeftInputAction,
            moveDownInputAction,
            moveRightInputAction,
            jumpInputAction,
            runInputAction
    ),
    InputGroupsIds.BASIC_MOVEMENT.ordinal(),
    // All the actions in this groups can't be remapped
    InputEnums.REMAP_OPTION_DISABLED
);

InputGroup در Input SDK 1.1.1-beta (با رشته نسخه)

کاتلین

companion object {
    private val movementInputGroup  = InputGroup.create(
        "Basic movement",
        listOf(
            moveUpInputAction,
            moveLeftInputAction,
            moveDownInputAction,
            moveRightInputAction,
            jumpInputAction,
            runInputAction),
        InputIdentifier.create(
            INPUTMAP_VERSION, InputGroupsIds.BASIC_MOVEMENT.ordinal.toLong()),
        // All the actions in this groups can't be remapped
        InputEnums.REMAP_OPTION_DISABLED
    )
}

جاوا

private static final InputGroup movementInputGroup = InputGroup.create(
    "Basic movement",
    Arrays.asList(
            moveUpInputAction,
            moveLeftInputAction,
            moveDownInputAction,
            moveRightInputAction,
            jumpInputAction,
            runInputAction
    ),
    InputIdentifier.create(
            INPUTMAP_VERSION,
            InputGroupsIds.BASIC_MOVEMENT.ordinal()),
    // All the actions in this groups can't be remapped
    InputEnums.REMAP_OPTION_DISABLED
);

برای اطلاعات بیشتر در مورد نسخه‌سازی اتصالات کلید، به ردیابی شناسه‌های کلید مراجعه کنید.

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

کاتلین

val gameInputMap = InputMap.create(
    listOf(movementInputGroup, mouseMovementInputGroup),
    MouseSettings.create(true, false)
)

جاوا

InputMap gameInputMap = InputMap.create(
    Arrays.asList(movementInputGroup, mouseMovementInputGroup),
    MouseSettings.create(true, false)
);

InputMap در Input SDK 1.1.1-beta

کاتلین

companion object {

  const val INPUTMAP_VERSION = "1.0.0"
  const val INPUT_MAP_ID = 0

  val gameInputMap = InputMap.create(
    listOf(movementInputGroup, mouseMovementInputGroup),
    MouseSettings.create(true, false),
    InputIdentifier.create(INPUTMAP_VERSION, INPUT_MAP_ID.toLong()),
    InputEnums.REMAP_OPTION_ENABLED,
    // Use ESCAPE as reserved key
    listof(InputControls.create(listOf(KeyEvent.KEYCODE_ESCAPE), emptyList()))
  )
}

جاوا


public static final String INPUT_MAP_VERSION = "1.0.0-beta";
public static final long INPUT_MAP_ID = 0;

public static final InputMap gameInputMap = InputMap.create(
        Arrays.asList(movementInputGroup, mouseMovementInputGroup),
        MouseSettings.create(true, false),
        InputIdentifier.create(INPUTMAP_VERSION, INPUT_MAP_ID),
        InputEnums.REMAP_OPTION_ENABLED,
        // Use ESC key as reserved key
        Arrays.asList(
                InputControls.create(
                        Collections.singletonList(KeyEvent.KEYCODE_ESCAPE),
                        Collections.emptyList()
                )
        )
);

بعدش چی

با اختصاص دادن کنترل‌های مختلف برای صحنه‌های مختلف با استفاده از InputContexts یا به‌روزرسانی رابط کاربری بازی‌تان با دریافت اطلاع‌رسانی در مورد نقشه‌برداری مجدد رویدادها با استفاده از InputRemappingListeners ، ارتقا خود را به نسخه 1.1.1-بتا ادامه دهید.

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