इस गाइड में, 1.0.0-बीटा वर्शन वाले गेम को अपग्रेड करने का तरीका बताया गया है Java और Kotlin के लिए इनपुट SDK टूल, 1.1.0-बीटा के लिए. ज़्यादा जानकारी के लिए, Unity के लिए Unity को अपग्रेड करने से जुड़ी गाइड खास निर्देश देखें.
रिलीज़ नोट
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
में अपग्रेड करें. - रीमैप करने की सुविधा को बंद है पर सेट करने के लिए, अपने
InputMap
को अपडेट करें.
अपने इनपुट SDK टूल के वर्शन को 1.1.0-beta
में अपग्रेड किया जा सकता है.
Google Play Games on PC में, रीमैप करने की ऐडवांस सुविधाओं का इस्तेमाल करें.
अपने गेम के अलग-अलग सीन के लिए कंट्रोल तय करने के लिए, InputContexts
जोड़ें.
कॉलबैक का इस्तेमाल करके, रीमैपिंग इवेंट को सुनने के लिए,
उपयोगकर्ता हर InputAction
के हिसाब से, रीमैप करने की सुविधा और उसे बंद नहीं कर सकता,
InputGroup
या InputMap
.
SDK टूल के नए वर्शन पर अपग्रेड करते समय, इन अपवादों को ध्यान में रखें:
काम न करने वाले कॉन्फ़िगरेशन
इन शर्तों के पूरा न होने पर, इनपुट को फिर से मैप करने की सुविधा बंद कर दी जाती है:
कई कुंजियों का इस्तेमाल करने वाला
InputAction
, मॉडिफ़ायर से बना होना चाहिए और नॉन-मॉडिफ़ायर कुंजी. उदाहरण के लिए,Shift + A मान्य है लेकिनA + B ,Ctrl + Alt , औरShift + A + Tab वाले लेबल नहीं हैं.दो या उससे ज़्यादा
InputAction
याInputGroup
ऑब्जेक्ट एक जैसे नहीं हो सकते यूनीक आईडी सबमिट करें.
अपग्रेड करें
इनपुट SDK 1.1.0-बीटा वर्शन, इनपुट SDK टूल के साथ पुराने सिस्टम के साथ काम करता है 1.0.0-बीटा. इनपुट SDK के पिछले तरीकों का इस्तेमाल करने वाले गेम तब तक बुनियादी रीमैपिंग का समर्थन करता है, जब तक कि वह किसी इस्तेमाल न किया जा सकने वाला कॉन्फ़िगरेशन होना चाहिए. अगर आपके गेम में इनपुट SDK टूल के पुराने वर्शन में है, तो यहां दी गई जानकारी पढ़ें. 0.0.4 से 1.0.0-बीटा वर्शन में अपग्रेड करने की गाइड.
1.1.0-बीटा वर्शन में अपग्रेड करने से नई सुविधाएं चालू हो जाती हैं. जैसे:
- सीन कंट्रोल में बदलावों को ट्रिगर करना.
- मुख्य मैपिंग इवेंट की सूचनाएं पाना.
- हर कार्रवाई, ग्रुप, कॉन्टेक्स्ट या मैप के हिसाब से, रीमैप करने की सुविधा बंद करना.
अपग्रेड डिपेंडेंसी
अगर इनपुट SDK टूल इंपोर्ट करने के लिए, Gradle का इस्तेमाल किया जा रहा है, तो सबसे नए वर्शन पर अपग्रेड करें:
// build.gradle
dependencies {
...
implementation 'com.google.android.libraries.play.games:inputmapping:1.1.0-beta'
...
}
स्टैटिक फ़ील्ड के बारे में जानकारी दें
वर्शन 1.1.0-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;
}
}
अपने Input Actions अपडेट करें
इनपुट SDK टूल 1.0.0-beta
का InputAction.create()
तरीका यह है
बंद कर दिया गया है. InputAction
में अब एक वर्शन आइडेंटिफ़ायर मौजूद है और इसे इस तौर पर मार्क किया जा सकता है
जिसे फिर से मैप किया जा सकता है या नहीं. इनपुट SDK टूल का इस्तेमाल करके तय किया गया InputAction
1.0.0-beta
create()
तरीके को डिफ़ॉल्ट रूप से फिर से मैप किया जा सकता है. साथ ही, इसमें वर्शन नहीं है
जानकारी:
इनपुट SDK 1.0.0-बीटा में 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()
)
);
इनपुट SDK 1.1.0-बीटा में 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
);
इनपुट SDK 1.1.0-बीटा (वर्शन स्ट्रिंग के साथ) में 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.0-beta
में, आपको हर एक की अलग से पहचान करनी होगी
InputGroup
. हर InputAction
एक InputGroup
से संबंधित होता है -- जो
संबंधित कार्रवाइयां. इससे कंट्रोल को बेहतर तरीके से नेविगेट किया जा सकता है और उन्हें आसानी से खोजा जा सकता है
को ट्रैक किया जा सकता है. उसी तरह जिस तरह InputAction
के लिए, एक यूनीक आइडेंटिफ़ायर होना चाहिए
एक InputContext
में सभी कार्रवाइयों में से, 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 का InputGroup.create()
तरीका
1.0.0-beta
के इस्तेमाल पर रोक लगा दी गई है. आपको गेम में अपना InputGroup
अपडेट करना होगा
जिसमें वर्शन आइडेंटिफ़ायर और बूलियन शामिल है. इससे पता चलता है कि InputAction
आपके ग्रुप में मौजूद ऑब्जेक्ट को फिर से मैप किया जा सकता है. इनपुट SDK टूल 1.0.0-beta
create()
तरीके का इस्तेमाल करके बनाए गए ग्रुप, फिर से मैप किए जा सकते हैं. इनका आईडी 0 है,
और वर्शन आईडी एक खाली स्ट्रिंग (""
) है:
इनपुट SDK 1.0.0-बीटा में 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
)
);
इनपुट SDK 1.1.0-बीटा में 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
);
इनपुट SDK 1.1.0-बीटा (वर्शन स्ट्रिंग के साथ) में 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
);
की बाइंडिंग का वर्शन तय करने के बारे में ज़्यादा जानकारी के लिए, यहां देखें ट्रैकिंग कुंजी के आईडी.
अपना इनपुट मैप अपडेट करें
इनपुट SDK टूल 1.0.0-beta
का InputMap.create()
तरीका यह है
बंद कर दिया गया है. वर्शन आइडेंटिफ़ायर असाइन करने के लिए, अपने InputMap
को अपडेट करें, ऑप्ट आउट करें
रीमैपिंग सुविधा से पूरी तरह से या अपने
जिसे आप उपयोगकर्ता को रीमैप करने के लिए इस्तेमाल नहीं करना चाहते. हर InputMap
पर
इनपुट SDK टूल 1.0.0-beta
create()
तरीके का इस्तेमाल करके तय किया गया है
इसे डिफ़ॉल्ट रूप से फिर से मैप किया जा सकता है. इसे 0
आईडी से पहचाना जाता है और इसमें कोई
सुरक्षित रखा जाता है.
इनपुट SDK 1.0.0-बीटा में 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)
);
इनपुट SDK 1.1.0-बीटा में 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()
)
)
);
अगला कदम क्या है
1.1.0-बीटा में इस तारीख तक अपग्रेड करना जारी रखें
अलग-अलग सीन के लिए अलग-अलग कंट्रोल असाइन करना
InputContexts
का इस्तेमाल करके या इस तरीके से अपने गेम के यूज़र इंटरफ़ेस (यूआई) को अपडेट करके
इनका इस्तेमाल करके इवेंट को फिर से मैप करने के बारे में सूचना पाएं
InputRemappingListeners
.
अपनी की-बाइंडिंग अपडेट करते समय, की बाइंडिंग डिज़ाइन करने के सबसे सही तरीके पाबंदियों और रीमैपिंग सुविधा की सीमाएं.