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