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

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

रिलीज़ नोट

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

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

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

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

अपने गेम में बटन को फिर से मैप करने की सुविधा चालू करने के लिए, आपको इनपुट 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 टूल के फ़्लो को दिखाने वाला डायग्राम.

अपग्रेड करें

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

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

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

इंस्टॉलेशन

Unity प्लग इन का v1.1.1-बीटा वर्शन, आपके इस्तेमाल के लिए उपलब्ध है. आपको अपने गेम में इंस्टॉल किए गए 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 को अपडेट करना

इनपुट SDK 1.0.0-beta का InputAction.create() तरीका अब काम नहीं करता. InputAction में वर्शन आइडेंटिफ़ायर होता है और इसे फिर से मैप किया जा सकता है या नहीं. इनपुट 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
);

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

इनपुट 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 की तरह, इनपुट 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
);

अपनी की बाइंडिंग के वर्शन के बारे में ज़्यादा जानने के लिए, की आईडी ट्रैक करना देखें.

अपना इनपुट मैप अपडेट करें

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

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