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