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

इस गाइड में, Unity के लिए आपके गेम को 1.0 से 1.1 इनपुट 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 टूल को अपग्रेड करने की ज़रूरत नहीं है आपके गेम को हटा दिया जाएगा, लेकिन रीमैपिंग काम न करने वाले कॉन्फ़िगरेशन का पता चला है.

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

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

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

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

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

काम न करने वाले कॉन्फ़िगरेशन

इन शर्तों का पूरा न होने पर, इनपुट को फिर से मैप करने की सुविधा बंद कर दी जाती है:

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

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

पेश है InputContext

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

नीचे दिए गए क्रम के डायग्राम में दिखाया गया है कि setInputContext() API यहां कैसे काम करता है रनटाइम:

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

अपग्रेड करें

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

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

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

इंस्टॉलेशन

Unity प्लगिन v1.1.0-बीटा आपके इस्तेमाल के लिए उपलब्ध है. आपको आपके गेम में इंस्टॉल किए गए इनपुट SDK टूल के पिछले वर्शन को कर सकते हैं.

अपने गेम में इनपुट SDK v1.1.0-बीटा जोड़ने के लिए, देखें एसडीके जोड़ना.

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

वर्शन 1.1.0-बीटा के लिए, अपने 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

अपने Input actions अपडेट करें

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

इनपुट SDK 1.0.0-बीटा में InputAction

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

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

इनपुट SDK 1.0.0-बीटा में InputGroup

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

इनपुट SDK 1.1.0-बीटा में 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
);

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

इनपुट SDK 1.0.0-बीटा में InputMap

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

इनपुट SDK 1.1.0-बीटा में 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()
);

अगला कदम क्या है

1.1.0-बीटा में इस तारीख तक अपग्रेड करना जारी रखें अलग-अलग सीन के लिए अलग-अलग कंट्रोल असाइन करना InputContexts का इस्तेमाल करके या इस तरीके से अपने गेम के यूज़र इंटरफ़ेस (यूआई) को अपडेट करके इनका इस्तेमाल करके इवेंट को फिर से मैप करने के बारे में सूचना पाएं InputRemappingListeners.

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