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

इस गाइड में, Unity के लिए उपलब्ध Input SDK को 1.0 से 1.1 वर्शन पर अपग्रेड करने का तरीका बताया गया है. Java और Kotlin के निर्देशों के लिए, यहां क्लिक करें.

रिलीज़ नोट

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

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

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

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

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

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

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

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

Input SDK टूल के वर्शन को 1.1.1-beta पर अपग्रेड किया जा सकता है. इससे आपको पीसी पर Google Play Games में, रीमैपिंग की बेहतर सुविधाओं का फ़ायदा मिलेगा. इसके लिए, InputContexts का इस्तेमाल करके अपने गेम के अलग-अलग सीन के लिए कंट्रोल तय करें. साथ ही, रीमैपिंग इवेंट के बारे में सूचना पाने के लिए कॉलबैक जोड़ें. इसके अलावा, रिज़र्व की गई कुंजियों का एक सेट तय करें, जिन्हें उपयोगकर्ता रीमैप नहीं कर सकता. साथ ही, InputAction, InputGroup या InputMap के हिसाब से रीमैपिंग की सुविधा बंद करें.

अपग्रेड करते समय, इन अपवादों का ध्यान रखें:

ऐसे कॉन्फ़िगरेशन जिनका इस्तेमाल नहीं किया जा सकता

अगर ये शर्तें पूरी नहीं होती हैं, तो इनपुट रीमैपिंग की सुविधा काम नहीं करेगी:

  • एक से ज़्यादा कुंजियों का इस्तेमाल करने वाले InputAction में, कार्रवाई बदलने वाली कुंजी और कार्रवाई न बदलने वाली कुंजी शामिल होनी चाहिए. उदाहरण के लिए, Shift + A मान्य है, लेकिन A + B, Ctrl + Alt, और Shift + A + Tab अमान्य है.

  • दो या उससे ज़्यादा InputAction या InputGroup ऑब्जेक्ट के लिए, एक ही यूनीक आईडी इस्तेमाल नहीं किया जा सकता.

InputContext के बारे में जानकारी

InputContext की मदद से, गेम में अलग-अलग कार्रवाइयों के लिए एक ही बटन का इस्तेमाल किया जा सकता है. इससे कोई समस्या नहीं होती. इस तरह, अगर कोई गेम गेमप्ले के दौरान कूदने और मेन्यू में किसी विकल्प को चुनने के लिए स्पेस का इस्तेमाल करता है, तो खिलाड़ी मेन्यू में स्पेस को Enter और गेमप्ले के दौरान स्पेस को ऊपर वाले ऐरो पर अलग-अलग तरीके से रीमैप कर सकते हैं.

यहां दिए गए सीक्वेंस डायग्राम में दिखाया गया है कि setInputContext() एपीआई, रनटाइम पर कैसे काम करता है:

कुंजी को फिर से मैप करते समय, Input SDK टूल के फ़्लो को दिखाने वाला डायग्राम.

अपग्रेड करें

Input SDK टूल के पिछले वर्शन का इस्तेमाल करने वाले गेम में, अब भी बुनियादी रीमैपिंग की सुविधा काम करती है. हालांकि, ऐसा तब तक होता है, जब तक वे ऐसे कॉन्फ़िगरेशन का इस्तेमाल न करें जो काम नहीं करता. अगर आपका गेम, Input SDK के पुराने वर्शन का इस्तेमाल कर रहा है, तो 0.0.4 से 1.0.0-beta वर्शन पर अपग्रेड करने से जुड़ी गाइड पढ़ें.

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

  • ट्रिगर करने के कॉन्टेक्स्ट में बदलाव.
  • की मैपिंग वाले मुख्य इवेंट की सूचनाएं पाना
  • कार्रवाई, ग्रुप, कॉन्टेक्स्ट या मैप के हिसाब से रीमैपिंग की सुविधा बंद करना.

इंस्टॉलेशन

Unity प्लगिन v1.1.1-beta का इस्तेमाल किया जा सकता है. आपको अपने गेम में इंस्टॉल किए गए Input SDK के सभी पिछले वर्शन मिटाने होंगे. साथ ही, आपको मौजूदा वर्शन पर अपग्रेड करना होगा.

अपने गेम में Input SDK v1.1.1-beta जोड़ने के लिए, एसडीके जोड़ना लेख पढ़ें.

स्टैटिक फ़ील्ड तय करना

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

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

Input SDK 1.0.0-beta में InputAction

var driveAction = PlayInputAction.Create(
    "Drive",
    (long)InputEventIds.DRIVE,
    PlayInputControls.Create(
        new[] { AndroidKeyCode.KEYCODE_SPACE },
        new List<PlayMouseAction>()
    )
);

Input SDK 1.1.1-beta में InputAction

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

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

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

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

Input SDK 1.0.0-beta में InputGroup

var gameInputGroup = PlayInputGroup.Create(
    "Road controls",
    new List<PlayInputAction>
    {
        driveAction,
        turboAction,
        openGarageAction,
        openPgsAction,
        openStoreAction
    }
);

Input SDK 1.1.1-beta में InputGroup

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

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

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

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

Input SDK 1.0.0-beta में InputMap

var gameInputMap = PlayInputMap.Create(
    new List<PlayInputGroup>
    {
        gameInputGroup,
        menuInputGroup
    },
    PlayMouseSettings.Create(false, false)
);

Input SDK 1.1.1-beta में InputMap


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-बीटा वर्शन पर अपग्रेड करें.

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