इस गाइड में, अपने गेम को 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 को
1.1.1-betaपर अपग्रेड करें. - की बाइंडिंग अपडेट करें, ताकि काम न करने वाले कॉन्फ़िगरेशन से बचा जा सके.
- रीमैपिंग की सुविधा को चालू करने के लिए, अपना
InputMapअपडेट करें.
अगर आपको अपने गेम के लिए रीमैपिंग की सुविधा से ऑप्ट आउट करना है, लेकिन की बाइंडिंग का सिर्फ़ पढ़ने वाला वर्शन दिखाना है, तो यह तरीका अपनाएं:
- Input SDK को
1.1.1-betaपर अपग्रेड करें. - रीमैपिंग की सुविधा को बंद करने के लिए, अपना
InputMapअपडेट करें.
Google Play Games on PC में रीमैपिंग की बेहतर सुविधाओं का फ़ायदा पाने के लिए, Input SDK के अपने वर्शन को 1.1.1-beta पर अपग्रेड किया जा सकता है. इसके लिए, InputContexts का इस्तेमाल करके, अपने गेम के अलग-अलग सीन के लिए कंट्रोल तय करें. साथ ही, रीमैपिंग इवेंट के बारे में सूचना पाने के लिए, कॉल बैक जोड़ें. इसके अलावा, रिज़र्व की गई कुंजियों का सेट तय करें, जिन्हें उपयोगकर्ता रीमैप नहीं कर सकता. साथ ही, InputAction, InputGroup या InputMap के हिसाब से रीमैपिंग की सुविधा बंद करें.
अपग्रेड करते समय, इन अपवादों पर ध्यान दें:
काम न करने वाले कॉन्फ़िगरेशन
अगर ये शर्तें पूरी नहीं होती हैं, तो इनपुट रीमैपिंग की सुविधा बंद हो जाती है:
InputActionमें एक से ज़्यादा कुंजियों का इस्तेमाल किया जाना चाहिए. इसमें एक मॉडिफ़ायर और एक नॉन-मॉडिफ़ायर कुंजी शामिल होनी चाहिए. उदाहरण के लिए,Shift + A मान्य है. हालांकि,A + B ,Ctrl + Alt , औरShift + A + Tab मान्य नहीं है.दो या उससे ज़्यादा
InputActionयाInputGroupऑब्जेक्ट, एक ही यूनीक आईडी शेयर नहीं कर सकते.
InputContext के बारे में जानकारी
InputContext की मदद से, कोई गेम अपने गेम में अलग-अलग कार्रवाइयों के लिए एक ही कुंजी का इस्तेमाल कर सकता है. इससे कोई समस्या नहीं होती.
यहां दिया गया सीक्वेंस डायग्राम दिखाता है कि रनटाइम के दौरान, setInputContext() API कैसे काम करता है:

अपग्रेड करें
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-beta के लिए, अपने
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 अपडेट करना
InputAction
Input SDK 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-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 अपडेट करना
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 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 अपडेट करना
Input SDK 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-beta पर अपग्रेड करना जारी रखें.InputContextsInputRemappingListeners
की-बाइंडिंग अपडेट करते समय, की बाइंडिंग डिज़ाइन करने के सबसे सही तरीके देखें. साथ ही, रीमैपिंग की सुविधा की पाबंदियों और सीमाओं को ध्यान में रखें.