Java और Kotlin के लिए इनपुट SDK टूल को वर्शन 1.1 पर अपग्रेड करें

इस गाइड में, अपने गेम को Java और Kotlin के लिए Input SDK टूल के 1.0.0-beta वर्शन से 1.1.1-beta वर्शन पर अपग्रेड करने का तरीका बताया गया है. Unity के लिए खास निर्देशों के लिए, Unity अपग्रेड गाइड देखें.

रिलीज़ नोट

Google Play Games on PC में, कीबोर्ड के कंट्रोल को फिर से मैप किया जा सकता है. यह, इनपुट SDK टूल का इस्तेमाल करके, आपके गेम में उपलब्ध की बाइंडिंग के आधार पर किया जाता है.

उपयोगकर्ता इस सुविधा को ऐक्सेस करने के लिए, ओवरले खोलते हैं. इसके बाद, वे कंट्रोल चुनते हैं और उस ऐक्शन पर क्लिक करते हैं जिसे उन्हें रीमैप करना है.

Google Play Games on PC, उपयोगकर्ता के मैप किए गए हर इनपुट को आपके गेम के डिफ़ॉल्ट इनपुट पर मैप करता है. इस तरह आपके गेम को खिलाड़ी के रीमैपिंग के बारे में पता नहीं होना चाहिए. अगर आपको गेम में की गई किसी कार्रवाई के लिए नया इनपुट जानना है, जैसे कि गेम में कीबोर्ड कंट्रोल दिखाना, तो इवेंट को फिर से मैप करने के लिए सूचना पाने के लिए, कॉलबैक रजिस्टर किया जा सकता है. हालांकि, ऐसा करना ज़रूरी नहीं है.

'पीसी के लिए Google Play Games', हर उपयोगकर्ता के रीमैप किए गए कंट्रोल को स्थानीय स्टोरेज में सेव करता है, ताकि वे गेमिंग सेशन के दौरान काम करते रहें. यह डेटा डिवाइस पर सेव होता है. इसलिए, इससे मोबाइल पर गेमिंग के अनुभव पर कोई असर नहीं पड़ता. साथ ही, Google Play Games on PC को अनइंस्टॉल करने पर, यह डेटा मिट जाता है. कंट्रोल सेटिंग, एक से ज़्यादा पीसी डिवाइसों पर सेव नहीं होतीं.

अपने गेम में बटन को फिर से मैप करने की सुविधा चालू करने के लिए, आपको Input SDK टूल को अपग्रेड करने की ज़रूरत नहीं है. हालांकि, अगर ऐसा कॉन्फ़िगरेशन मिलता है जो काम नहीं करता, तो आपके गेम के लिए बटन को फिर से मैप करने की सुविधा बंद की जा सकती है.

अगर आपको इनपुट को फिर से मैप करने की सुविधा को कंट्रोल करना है या आपके गेम के लिए, फिर से मैप करने की सुविधा बंद है, तो इसे ठीक करने के लिए यह तरीका अपनाएं:

  • इनपुट SDK टूल 1.1.1-beta में अपग्रेड करें.
  • काम न करने वाले कॉन्फ़िगरेशन से बचने के लिए, किसी भी कीबाइंडिंग को अपडेट करें.
  • InputMap को अपडेट करके, बटन को फिर से मैप करने की सुविधा को चालू के तौर पर सेट करें.

अगर आपको अपने गेम के लिए, बटन को फिर से मैप करने की सुविधा से ऑप्ट-आउट करना है, लेकिन आपको बटन बाइंडिंग का रीड-ओनली वर्शन दिखाना है, तो यह तरीका अपनाएं:

  • Input SDK 1.1.1-beta पर अपग्रेड करें.
  • InputMap को अपडेट करके, बटन को फिर से मैप करने की सुविधा को बंद है पर सेट करें.

पीसी पर Google Play Games में, बटन को फिर से मैप करने की बेहतर सुविधाओं का फ़ायदा पाने के लिए, इनपुट 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 के साथ काम करता है. इनपुट SDK के पुराने तरीकों का इस्तेमाल करने वाले गेम भी अब भी बुनियादी तरीके से रीमैप करने की सुविधा देते हैं. हालांकि, ऐसा तब ही होगा, जब वे इस्तेमाल नहीं किए जा सकने वाले कॉन्फ़िगरेशन का इस्तेमाल करेंगे. अगर आपके गेम में इनपुट SDK टूल के पहले वाले वर्शन का इस्तेमाल किया जा रहा है, तो 0.0.4 से 1.0.0-बीटा वर्शन पर अपग्रेड करने की गाइड पढ़ें.

1.1.1-बीटा वर्शन पर अपग्रेड करने पर, नई सुविधाएं चालू हो जाती हैं. इनमें ये शामिल हैं:

अपग्रेड डिपेंडेंसी

अगर इनपुट SDK टूल इंपोर्ट करने के लिए, Gradle का इस्तेमाल किया जा रहा है, तो सबसे नए वर्शन पर अपग्रेड करें:

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

स्टैटिक फ़ील्ड के बारे में जानकारी दें

1.1.1-beta वर्शन के लिए, अपने InputAction, InputGroup, InputContext, और InputMap ऑब्जेक्ट को अपनी InputMappingProvider क्लास के स्टैटिक फ़ील्ड के तौर पर तय करना एक अच्छा तरीका है. ऐसा इसलिए, क्योंकि इन फ़ील्ड को आपके ऐप्लिकेशन के दूसरे हिस्सों से ऐक्सेस किया जा सकता है:

Kotlin

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(...)
    }
}

Java

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 को अपडेट करना

इनपुट SDK 1.0.0-beta का InputAction.create() तरीका अब काम नहीं करता. InputAction में अब वर्शन आइडेंटिफ़ायर होता है. साथ ही, इसे फिर से मैप किया जा सकता है या नहीं, इस आधार पर मार्क किया जा सकता है. इनपुट SDK टूल1.0.0-beta create() के तरीके का इस्तेमाल करके तय किया गया InputAction, डिफ़ॉल्ट रूप से फिर से मैप किया जा सकता है. साथ ही, इसमें वर्शन की जानकारी मौजूद नहीं होती:

Input SDK 1.0.0-beta में InputAction

Kotlin

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

Java

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

Input SDK 1.1.1-beta में InputAction

Kotlin

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
}

Java

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
);

Input SDK 1.1.1-beta में InputAction (वर्शन स्ट्रिंग के साथ)

Kotlin

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
)

Java

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 अपडेट करना

इनपुट SDK 1.1.1-beta में, आपको हर InputGroup की यूनीक पहचान करनी होगी. हर InputAction, InputGroup से जुड़ा होता है. यह एक ऐसा कलेक्शन होता है जिसमें मिलती-जुलती कार्रवाइयां होती हैं. इससे गेमप्ले के दौरान कंट्रोल को ढूंढना आसान हो जाता है और उन्हें ढूंढना आसान हो जाता है. जिस तरह एक ही InputContext में सभी कार्रवाइयों के बीच InputAction का यूनीक आइडेंटिफ़ायर होना चाहिए उसी तरह मौजूदा ग्रुप में InputGroup का यूनीक आईडी होना चाहिए.

इस सेक्शन में दिए गए उदाहरणों के लिए, गेम में दो InputContext ऑब्जेक्ट होते हैं, जो मुख्य मेन्यू और गेमप्ले को दिखाते हैं. यहां दी गई सूची का इस्तेमाल करके, इन कॉन्टेक्स्ट में हर InputGroup के लिए सही आईडी को ट्रैक किया जाता है:

Kotlin

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
}

Java

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 की तरह ही, इनपुट SDK टूल1.0.0-beta के InputGroup.create() तरीके को बंद कर दिया गया है. आपको अपने गेम में InputGroup को वर्शन आइडेंटिफ़ायर और बोलियन के साथ अपडेट करना होगा. इससे यह पता चलता है कि आपके ग्रुप में मौजूद InputAction ऑब्जेक्ट को फिर से मैप किया जा सकता है या नहीं. इनपुट SDK टूल 1.0.0-beta create() तरीके का इस्तेमाल करके बनाए गए ग्रुप फिर से मैप किए जा सकते हैं. इनका आईडी 0 है और वर्शन आईडी एक खाली स्ट्रिंग ("") है:

Input SDK 1.0.0-beta में InputGroup

Kotlin

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

Java

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

Input SDK 1.1.1-beta में InputGroup

Kotlin

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
    )
}

Java

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
);

Input SDK 1.1.1-beta में InputGroup (वर्शन स्ट्रिंग के साथ)

Kotlin

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
    )
}

Java

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 अपडेट करना

इनपुट SDK टूल 1.0.0-beta का InputMap.create() तरीका अब काम नहीं करता. अपने InputMap को अपडेट करके वर्शन आइडेंटिफ़ायर असाइन करें, रीमैप करने की सुविधा से पूरी तरह ऑप्ट आउट करें या अपने गेम के लिए रिज़र्व की गई उन कुंजियों की सूची असाइन करें जिन्हें आपके उपयोगकर्ता को रीमैप करने के लिए इस्तेमाल नहीं करना है. इनपुट SDK टूल 1.0.0-beta create() के तरीके का इस्तेमाल करके तय किए गए हर InputMap को डिफ़ॉल्ट रूप से फिर से मैप किया जा सकता है. इसकी पहचान आईडी 0 से की जाती है और इसमें कोई रिज़र्व की गई कुंजी नहीं होती.

Input SDK 1.0.0-beta में InputMap

Kotlin

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

Java

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

Input SDK 1.1.1-beta में InputMap

Kotlin

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()))
  )
}

Java


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 का इस्तेमाल करके, अलग-अलग सीन के लिए अलग-अलग कंट्रोल असाइन करें और 1.1.1-बीटा वर्शन पर अपग्रेड करें. इसके अलावा, InputRemappingListeners का इस्तेमाल करके, इवेंट को फिर से मैप करने पर सूचना पाएं और अपने गेम का यूज़र इंटरफ़ेस (यूआई) अपडेट करें.

बटन को फिर से सेट करते समय, बटन को डिज़ाइन करने के सबसे सही तरीके देखें. साथ ही, बटन को फिर से सेट करने की सुविधा की पाबंदियों और सीमाओं को ध्यान में रखें.