इस गाइड में, Java और Kotlin के लिए उपलब्ध 1.0.0-beta Input SDK से अपने गेम को 1.1.1-beta पर अपग्रेड करने का तरीका बताया गया है. Unity के लिए खास निर्देश जानने के लिए, Unity को अपग्रेड करने से जुड़ी गाइड देखें.
रिलीज़ नोट
Google Play Games on PC, कीबोर्ड कंट्रोल को फिर से मैप करने की सुविधा देता है. यह सुविधा, आपके गेम में Input SDK का इस्तेमाल करके दी गई कुंजी बाइंडिंग पर आधारित होती है.
उपयोगकर्ता इस सुविधा को ऐक्सेस करने के लिए, ओवरले खोलते हैं. इसके बाद, कंट्रोल चुनते हैं और फिर उस ऐक्शन पर क्लिक करते हैं जिसे उन्हें रीमैप करना है.
Google Play Games on PC, उपयोगकर्ता के रीमैप किए गए हर इनपुट को आपके गेम के डिफ़ॉल्ट इनपुट पर मैप करता है. इस तरह, आपके गेम को प्लेयर की रीमैपिंग के बारे में पता नहीं चलेगा. अगर आपको गेम में की जाने वाली किसी कार्रवाई के लिए नए इनपुट के बारे में जानना है, जैसे कि अपने गेम में कीबोर्ड कंट्रोल दिखाना, तो आपके पास कॉलबैक रजिस्टर करने का विकल्प होता है. इससे आपको रीमैपिंग इवेंट के बारे में सूचना मिल जाएगी.
पीसी पर Google Play Games, हर उपयोगकर्ता के रीमैप किए गए कंट्रोल को स्थानीय तौर पर सेव करता है, ताकि वे गेमिंग सेशन के दौरान बने रहें. यह डेटा स्थानीय तौर पर सेव होता है. इसलिए, इससे मोबाइल पर गेम खेलने के अनुभव पर कोई असर नहीं पड़ता. साथ ही, Google Play Games on PC को अनइंस्टॉल करने पर यह डेटा मिट जाता है. कंट्रोल सेटिंग, एक से ज़्यादा पीसी डिवाइसों पर सेव नहीं होती हैं.
अपने गेम में बटन रीमैपिंग की सुविधा चालू करने के लिए, आपको Input SDK को अपग्रेड करने की ज़रूरत नहीं है. हालांकि, अगर रीमैपिंग के लिए काम न करने वाला कॉन्फ़िगरेशन मिलता है, तो आपके गेम के लिए रीमैपिंग की सुविधा बंद की जा सकती है.
अगर आपको इनपुट रीमैपिंग की सुविधा को कंट्रोल करना है या आपके गेम के लिए रीमैपिंग की सुविधा बंद है, तो समस्या हल करने के लिए यह तरीका अपनाएं:
- Input 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ऑब्जेक्ट के लिए, एक ही यूनीक आईडी इस्तेमाल नहीं किया जा सकता.
अपग्रेड करें
Input SDK 1.1.1-beta, Input SDK 1.0.0-beta के साथ काम करता है. इनपुट एसडीके के पिछले वर्शन का इस्तेमाल करने वाले गेम में, अब भी बटन रीमैप करने की बुनियादी सुविधा काम करती है. हालांकि, ऐसा तब तक होता है, जब तक वे ऐसे कॉन्फ़िगरेशन का इस्तेमाल न करें जो काम नहीं करता. अगर आपका गेम, Input SDK के पुराने वर्शन का इस्तेमाल कर रहा है, तो 0.0.4 से 1.0.0-beta वर्शन पर अपग्रेड करने से जुड़ी गाइड पढ़ें.
1.1.1-beta पर अपग्रेड करने से, नई सुविधाएं चालू हो जाती हैं. इनमें ये शामिल हैं:
- सीन कंट्रोल में बदलाव ट्रिगर करना.
- मुख्य इवेंट की मैपिंग की सूचनाएं पाना.
- कार्रवाई, ग्रुप, कॉन्टेक्स्ट या मैप के हिसाब से रीमैपिंग की सुविधा बंद करना.
डिपेंडेंसी अपग्रेड करना
अगर Input SDK को इंपोर्ट करने के लिए Gradle का इस्तेमाल किया जा रहा है, तो सबसे नए वर्शन पर अपग्रेड करें:
// build.gradle
dependencies {
...
implementation 'com.google.android.libraries.play.games:inputmapping:1.1.1-beta'
...
}
स्टैटिक फ़ील्ड तय करना
वर्शन 1.1.1-beta के लिए, InputAction, InputGroup, InputContext, और InputMap ऑब्जेक्ट को अपनी InputMappingProvider क्लास के स्टैटिक फ़ील्ड के तौर पर तय करना एक अच्छा तरीका है. ऐसा इसलिए, क्योंकि इन फ़ील्ड को आपके ऐप्लिकेशन के अन्य हिस्सों से ऐक्सेस किया जा सकता है:
Kotlin
class InputSDKProvider : InputMappingProvider {
override fun onProvideInputMap(): InputMap { return gameInputMap }
companion object {
const val INPUTMAP_VERSION = "1.0.0"
private val moveUpInputAction = InputAction.create(...)
private val movementInputGroup = InputGroup.create(...)
val menuContext = InputContext.create(...)
val gameInputMap = InputMap.create(...)
}
}
Java
public class MyInputMappingProvider implements InputMappingProvider {
private static final String INPUTMAP_VERSION = "1.0.0";
private static final InputAction moveUpInputAction =
InputAction.create(...);
private static final InputGroup movementInputGroup = InputGroup.create(...);
public static final InputContext menuContext = InputContext.create(...);
public static final InputMap gameInputMap = InputMap.create(...);
@Override
public InputMap onProvideInputMap() {
return gameInputMap;
}
}
अपने InputActions अपडेट करना
Input SDK 1.0.0-beta का InputAction.create() तरीका अब काम नहीं करता. InputAction में अब वर्शन आइडेंटिफ़ायर होता है. इसे फिर से मैप किया जा सकता है या नहीं, इसके तौर पर मार्क किया जा सकता है. Input SDK का इस्तेमाल करके तय किया गया InputAction 1.0.0-beta create() तरीका, डिफ़ॉल्ट रूप से फिर से मैप किया जा सकता है. साथ ही, इसमें वर्शन की जानकारी नहीं होती:
Input SDK 1.0.0-beta में InputAction
Kotlin
val jumpInputAction = InputAction.create(
"Jump",
InputEventIds.JUMP.id,
InputControls.create(
listOf(KeyEvent.KEYCODE_SPACE),
emptyList()
)
)
Java
InputAction moveUpInputAction = InputAction.create(
"Move Up",
InputEventIds.MOVE_UP.ordinal(),
InputControls.create(
Collections.singletonList(KeyEvent.KEYCODE_W),
Collections.emptyList()
)
);
Input SDK 1.1.1-beta में InputAction
Kotlin
companion object {
private val moveUpInputAction = InputAction.create(
"Move Up",
InputActionsIds.DRIVE.ordinal.toLong(),
InputControls.create(listOf(KeyEvent.KEYCODE_W), emptyList()),
InputEnums.REMAP_OPTION_ENABLED) // This action is remappable
}
Java
private static final InputAction moveUpInputAction = InputAction.create(
"Move Up",
InputEventIds.MOVE_UP.ordinal(),
InputControls.create(
Collections.singletonList(KeyEvent.KEYCODE_W),
Collections.emptyList()),
InputEnums.REMAP_OPTION_ENABLED // this action is remappable
);
Input SDK 1.1.1-beta में InputAction (वर्शन स्ट्रिंग के साथ)
Kotlin
private val enterMenuInputAction = InputAction.create(
"Enter menu",
InputControls.create(listOf(KeyEvent.KEYCODE_ENTER), emptyList()),
InputIdentifier.create(
INPUTMAP_VERSION, InputActionsIds.ENTER_MENU.ordinal.toLong()),
InputEnums.REMAP_OPTION_ENABLED
)
Java
private static final InputAction moveUpInputAction = InputAction.create(
"Move Up",
InputControls.create(
Collections.singletonList(KeyEvent.KEYCODE_W),
Collections.emptyList()),
InputIdentifier.create(
INPUTMAP_VERSION,
InputEventIds.MOVE_UP.ordinal()),
InputEnums.REMAP_OPTION_ENABLED // this action is remappable
);
कुंजी बाइंडिंग के वर्शन के बारे में ज़्यादा जानने के लिए, कुंजी आईडी ट्रैक करना लेख पढ़ें.
अपने InputGroups अपडेट करना
इनपुट एसडीके 1.1.1-beta में, आपको हर InputGroup की यूनीक तरीके से पहचान करनी होगी. हर InputAction, InputGroup से जुड़ा होता है. InputGroup, एक जैसी कार्रवाइयों का कलेक्शन होता है. इससे गेमप्ले के दौरान कंट्रोल को आसानी से नेविगेट किया जा सकता है और उन्हें खोजा जा सकता है. जिस तरह एक InputContext में मौजूद सभी कार्रवाइयों के लिए, InputAction का यूनीक आइडेंटिफ़ायर होना चाहिए उसी तरह मौजूदा ग्रुप में, InputGroup का यूनीक आईडी होना चाहिए.
इस सेक्शन में दिए गए उदाहरणों के लिए, एक गेम में दो InputContext ऑब्जेक्ट हैं. ये मुख्य मेन्यू और गेमप्ले को दिखाते हैं. इन कॉन्टेक्स्ट में, हर InputGroup के लिए सही आईडी ट्रैक किए जाते हैं. इसके लिए, यहां दिए गए एन्यूमरेशन का इस्तेमाल किया जाता है:
Kotlin
enum class 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
}
Java
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
Kotlin
val movementInputGroup = InputGroup.create(
"Basic Movement",
listOf(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction)
)
Java
InputGroup movementInputGroup = InputGroup.create(
"Basic movement",
Arrays.asList(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction
)
);
Input SDK 1.1.1-beta में InputGroup
Kotlin
companion object {
private val movementInputGroup = InputGroup.create(
"Basic movement",
listOf(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction),
InputGroupsIds.BASIC_MOVEMENT.ordinal.toLong(),
// All the actions in this groups can't be remapped
InputEnums.REMAP_OPTION_DISABLED
)
}
Java
private static final InputGroup movementInputGroup = InputGroup.create(
"Basic movement",
Arrays.asList(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction
),
InputGroupsIds.BASIC_MOVEMENT.ordinal(),
// All the actions in this groups can't be remapped
InputEnums.REMAP_OPTION_DISABLED
);
Input SDK 1.1.1-beta में InputGroup (वर्शन स्ट्रिंग के साथ)
Kotlin
companion object {
private val movementInputGroup = InputGroup.create(
"Basic movement",
listOf(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction),
InputIdentifier.create(
INPUTMAP_VERSION, InputGroupsIds.BASIC_MOVEMENT.ordinal.toLong()),
// All the actions in this groups can't be remapped
InputEnums.REMAP_OPTION_DISABLED
)
}
Java
private static final InputGroup movementInputGroup = InputGroup.create(
"Basic movement",
Arrays.asList(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction
),
InputIdentifier.create(
INPUTMAP_VERSION,
InputGroupsIds.BASIC_MOVEMENT.ordinal()),
// All the actions in this groups can't be remapped
InputEnums.REMAP_OPTION_DISABLED
);
कुंजी बाइंडिंग के वर्शन के बारे में ज़्यादा जानने के लिए, कुंजी आईडी ट्रैक करना लेख पढ़ें.
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
Kotlin
val gameInputMap = InputMap.create(
listOf(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false)
)
Java
InputMap gameInputMap = InputMap.create(
Arrays.asList(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false)
);
Input SDK 1.1.1-beta में InputMap
Kotlin
companion object {
const val INPUTMAP_VERSION = "1.0.0"
const val INPUT_MAP_ID = 0
val gameInputMap = InputMap.create(
listOf(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false),
InputIdentifier.create(INPUTMAP_VERSION, INPUT_MAP_ID.toLong()),
InputEnums.REMAP_OPTION_ENABLED,
// Use ESCAPE as reserved key
listof(InputControls.create(listOf(KeyEvent.KEYCODE_ESCAPE), emptyList()))
)
}
Java
public static final String INPUT_MAP_VERSION = "1.0.0-beta";
public static final long INPUT_MAP_ID = 0;
public static final InputMap gameInputMap = InputMap.create(
Arrays.asList(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false),
InputIdentifier.create(INPUTMAP_VERSION, INPUT_MAP_ID),
InputEnums.REMAP_OPTION_ENABLED,
// Use ESC key as reserved key
Arrays.asList(
InputControls.create(
Collections.singletonList(KeyEvent.KEYCODE_ESCAPE),
Collections.emptyList()
)
)
);
अगला कदम क्या है
InputContexts का इस्तेमाल करके, अलग-अलग सीन के लिए अलग-अलग कंट्रोल असाइन करें या InputRemappingListeners का इस्तेमाल करके, रीमैपिंग इवेंट के बारे में सूचना पाएं. इसके बाद, अपने गेम के यूज़र इंटरफ़ेस (यूआई) को अपडेट करके, 1.1.1-बीटा वर्शन पर अपग्रेड करें.
की-बाइंडिंग अपडेट करते समय, की-बाइंडिंग डिज़ाइन करने के सबसे सही तरीके देखें. साथ ही, रीमैपिंग की सुविधा से जुड़ी पाबंदियों और सीमाओं के बारे में जानें.