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

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

प्रॉडक्ट की जानकारी

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

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

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

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

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

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

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

  • 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() API कैसे काम करता है:

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

अपग्रेड करें

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

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

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

इंस्टॉलेशन

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

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

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-बीटा (वर्शन स्ट्रिंग के साथ) में 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 को अपडेट करना

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

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