এই নির্দেশিকা থেকে আপনি Java ও Kotlin-এর জন্য 1.0.0-beta Input SDK থেকে 1.1.1-beta ভার্সনে গেম কীভাবে আপগ্রেড করবেন তা জানতে পারবেন। Unity নির্দিষ্ট নির্দেশাবলীর জন্য Unity আপগ্রেড গাইড দেখুন।
রিলিজ নোট
পিসি (PC)-তে Google Play Games, Input SDK ব্যবহার করে আপনার গেমের দেওয়া কী বাইন্ডিংয়ের উপর ভিত্তি করে কীবোর্ড কন্ট্রোল রিম্যাপিং কাজ করে।
ব্যবহারকারীরা ওভারলে খুলে, কন্ট্রোল বেছে নিয়ে এবং তারপরে যে অ্যাকশন আবার ম্যাপ করতে চান সেটিতে ক্লিক করে এই ফিচার অ্যাক্সেস করেন।
পিসি (PC)-তে Google Play Games, ব্যবহারকারীর রিম্যাপ করা প্রতিটি ইনপুটকে আপনার গেমের ডিফল্ট ইনপুটের সাথে ম্যাপ করে। এইভাবে, আপনার গেমকে প্লেয়ারের রিম্যাপিং সম্পর্কে জানতে হবে না। ইন-গেম অ্যাকশনের জন্য নতুন ইনপুট সম্পর্কে আপনার জানার প্রয়োজন হলে, যেমন, আপনার গেমে কিবোর্ড কন্ট্রোল দেখানো, তাহলে আপনি ঐচ্ছিকভাবে রিম্যাপিং ইভেন্টের নোটিফিকেশন পেতে কলব্যাক রেজিস্টার করতে পারেন।
পিসি (PC)-তে Google Play Games প্রতিটি ব্যবহারকারীর রিম্যাপ করা কন্ট্রোল লোকালি স্টোর করে, যাতে সেগুলি গেমিং সেশন জুড়ে স্থায়ী হয়। এটি লোকাল স্টোরেজে সেভ করা হয় বলে, এটি মোবাইল অভিজ্ঞতাকে প্রভাবিত করে না এবং পিসি (PC)-তে Google Play Games আনইনস্টল করলে এটি মুছে যায়। একাধিক পিসি (PC) ডিভাইস জুড়ে কন্ট্রোল সেটিংস সেভ করা হয় না।
আপনার গেমে কী রিম্যাপিং চালু করতে Input SDK আপগ্রেড করার প্রয়োজন নেই, তবে কোনও কাজ করে না এমন কনফিগারেশন শনাক্ত করা হলে আপনার গেমের জন্য রিম্যাপিং বন্ধ করা হতে পারে।
আপনি যদি ইনপুট রিম্যাপিং অভিজ্ঞতা কন্ট্রোল করতে চান অথবা আপনার গেমের জন্য রিম্যাপিং ফিচার বন্ধ করা থাকলে, সমাধান করতে এইসব ধাপ অনুসরণ করুন:
- Input SDK
1.1.1-beta-এ আপগ্রেড করুন। - কাজ করে না এমন কনফিগারেশন এড়াতে যেকোনও কীম্যাপ আপডেট করুন।
- রিম্যাপিং ফিচার চালু করতে আপনার
InputMapআপডেট করুন।
আপনি যদি নিজের গেমের জন্য রিম্যাপিং ফিচার থেকে অপ্ট-আউট করতে চান, তবে এখনও আপনার কী বাইন্ডিংয়ের রিড-অনলি ভার্সন দেখাচ্ছেন, তাহলে এইসব ধাপ অনুসরণ করুন:
- Input SDK
1.1.1-beta-এ আপগ্রেড করুন। - বন্ধ হিসেবে রিম্যাপিং ফিচার সেট করতে আপনার
InputMapআপডেট করুন।
আপনি Input SDK-এর ভার্সন আপগ্রেড করে
1.1.1-beta উন্নত রিম্যাপিং ফিচার ব্যবহার করতে পারেন
পিসি (PC)-তে Google Play Games-এ। এর জন্য 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-এর সাথে ব্যাকওয়ার্ড মানানসই। Input SDK-এর আগের ভার্সন ব্যবহার করা গেমগুলি এখনও বেসিক রিম্যাপিং সাপোর্ট করে, যদি না সেগুলি কাজ করে না এমন কনফিগারেশন ব্যবহার করে। আপনার গেম যদি Input SDK-এর পুরনো ভার্সন ব্যবহার করে, তাহলে 0.0.4 থেকে 1.0.0-বিটা ভার্সনে আপগ্রেড করার গাইড পড়ে দেখুন।
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(...)
}
}
জাভা
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 ব্যবহার করে
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()
)
)
জাভা
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
}
জাভা
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-বিটাতে 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
)
জাভা
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 আপডেট করা
Input 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
}
জাভা
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-এর InputGroup.create() পদ্ধতি
1.0.0-beta বন্ধ করে দেওয়া হয়েছে। আপনাকে অবশ্যই নিজের InputGroup গেমের মধ্যে
একটি ভার্সন শনাক্তকারী এবং বুলিয়ান দিয়ে আপডেট করতে হবে যা নির্দেশ করে যে আপনার গ্রুপের InputAction
অবজেক্ট আবার ম্যাপ করা যাবে কিনা। বন্ধ হয়ে যাওয়া Input SDK 1.0.0-beta create() মেথড ব্যবহার করে তৈরি করা গ্রুপ আবার ম্যাপ করা যায়, সেটির আইডি হল ০,
এবং ভার্সন আইডি হল একটি খালি স্ট্রিং (""):
Input SDK 1.0.0-beta-তে InputGroup
Kotlin
val movementInputGroup = InputGroup.create(
"Basic Movement",
listOf(
moveUpInputAction,
moveLeftInputAction,
moveDownInputAction,
moveRightInputAction,
jumpInputAction,
runInputAction)
)
জাভা
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
)
}
জাভা
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
)
}
জাভা
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)
)
জাভা
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()))
)
}
জাভা
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.1-বিটাতে আপগ্রেড করা চালিয়ে যেতে, এগুলি করুন:
বিভিন্ন দৃশ্যের জন্য আলাদা আলাদা কন্ট্রোল অ্যাসাইন করুন
InputContexts ব্যবহার করুন অথবা আপনার গেমের UI আপডেট করুন। এটি করতে, এগুলি করুন:
রিম্যাপিং ইভেন্ট সম্পর্কে বিজ্ঞপ্তি পান এবং এর জন্য
InputRemappingListeners ব্যবহার করুন।
আপনার কী-বাইন্ডিং আপডেট করার সময়, কী-বাইন্ডিং ডিজাইন করার জন্য সঠিক পদ্ধতি দেখে নিন এবং রিম্যাপিং ফিচারের বিধিনিষেধ ও সীমাবদ্ধতা বিবেচনা করুন।