এই নির্দেশিকাটি ব্যাখ্যা করে কিভাবে আপনার গেমটি জাভা এবং কোটলিনের জন্য 1.0.0-বিটা ইনপুট SDK থেকে 1.1.1-বিটাতে আপগ্রেড করবেন। ইউনিটি সম্পর্কিত নির্দিষ্ট নির্দেশাবলীর জন্য ইউনিটি আপগ্রেড গাইড দেখুন।
রিলিজ নোটস
পিসিতে গুগল প্লে গেমস ইনপুট SDK ব্যবহার করে আপনার গেমের প্রদত্ত কী বাইন্ডিংয়ের উপর ভিত্তি করে কীবোর্ড নিয়ন্ত্রণের রিম্যাপিং সমর্থন করে।
ব্যবহারকারীরা ওভারলে খুলে, নিয়ন্ত্রণ নির্বাচন করে এবং তারপর যে ক্রিয়াটি পুনঃম্যাপ করতে চান তাতে ক্লিক করে এই বৈশিষ্ট্যটি অ্যাক্সেস করতে পারেন।
পিসিতে গুগল প্লে গেমস ব্যবহারকারীর দ্বারা রিম্যাপ করা প্রতিটি ইনপুট আপনার গেমের ডিফল্ট ইনপুটে ম্যাপ করে। এইভাবে আপনার গেমটিকে প্লেয়ারের রিম্যাপিং সম্পর্কে সচেতন থাকতে হবে না। যদি আপনার ইন-গেম অ্যাকশনের জন্য নতুন ইনপুট জানতে হয়, যেমন আপনার গেমের কীবোর্ড নিয়ন্ত্রণগুলি প্রদর্শন করা, তাহলে আপনি ঐচ্ছিকভাবে রিম্যাপিং ইভেন্টগুলির জন্য বিজ্ঞপ্তি পাওয়ার জন্য একটি কলব্যাক নিবন্ধন করতে পারেন।
পিসিতে গুগল প্লে গেমস প্রতিটি ব্যবহারকারীর পুনঃম্যাপ করা নিয়ন্ত্রণ স্থানীয়ভাবে সংরক্ষণ করে যাতে সেগুলি গেমিং সেশন জুড়ে স্থায়ী হয়। যেহেতু এটি স্থানীয়ভাবে সংরক্ষণ করা হয়, তাই এটি মোবাইল অভিজ্ঞতাকে প্রভাবিত করে না এবং পিসিতে গুগল প্লে গেমস আনইনস্টল করার পরে মুছে ফেলা হয়। একাধিক পিসি ডিভাইস জুড়ে নিয়ন্ত্রণ সেটিংস স্থায়ী হয় না।
আপনার গেমে কী রিম্যাপিং সক্ষম করার জন্য আপনাকে ইনপুট SDK আপগ্রেড করার দরকার নেই, তবে যদি কোনও অসমর্থিত কনফিগারেশন সনাক্ত করা হয় তবে আপনার গেমের জন্য রিম্যাপিং অক্ষম করা যেতে পারে।
আপনি যদি ইনপুট রিম্যাপিং অভিজ্ঞতা নিয়ন্ত্রণ করতে চান, অথবা আপনার গেমের জন্য রিম্যাপিং বৈশিষ্ট্যটি অক্ষম করা থাকে, তাহলে সমাধানের জন্য নিম্নলিখিত পদক্ষেপগুলি অনুসরণ করুন:
- ইনপুট SDK
1.1.1-betaতে আপগ্রেড করুন। - অসমর্থিত কনফিগারেশন এড়াতে যেকোনো কীবাইন্ডিং আপডেট করুন।
- রিম্যাপিং বৈশিষ্ট্যটি সক্রিয় করতে আপনার
InputMapআপডেট করুন।
আপনার কী বাইন্ডিংগুলির পঠনযোগ্য সংস্করণ প্রদর্শনের সময় যদি আপনি আপনার গেমের জন্য রিম্যাপিং বৈশিষ্ট্যটি অপ্ট-আউট করতে চান, তাহলে এই পদক্ষেপগুলি অনুসরণ করুন:
- ইনপুট SDK
1.1.1-betaতে আপগ্রেড করুন। - রিম্যাপিং বৈশিষ্ট্যটি অক্ষম এ সেট করতে আপনার
InputMapআপডেট করুন।
আপনি আপনার ইনপুট SDK এর সংস্করণটি 1.1.1-beta আপগ্রেড করতে পারেন যাতে আপনি পিসিতে Google Play Games-এ উন্নত রিম্যাপিং বৈশিষ্ট্যগুলি উপভোগ করতে পারেন। আপনি InputContexts ব্যবহার করে আপনার গেমের বিভিন্ন দৃশ্যের জন্য নিয়ন্ত্রণ নির্ধারণ করতে পারেন, রিম্যাপিং ইভেন্টগুলি শোনার জন্য কলব্যাক যোগ করতে পারেন, ব্যবহারকারী যে রিম্যাপ করতে পারবেন না এমন সংরক্ষিত কীগুলির একটি সেট সংজ্ঞায়িত করতে পারেন এবং InputAction , InputGroup অথবা InputMap প্রতি রিম্যাপিং বৈশিষ্ট্যটি নিষ্ক্রিয় করতে পারেন।
নতুন SDK সংস্করণে আপগ্রেড করার সময় নিম্নলিখিত ব্যতিক্রমগুলি বিবেচনা করুন:
অসমর্থিত কনফিগারেশন
নিম্নলিখিত শর্তগুলি পূরণ না হলে ইনপুট রিম্যাপিং অক্ষম করা হয়:
একাধিক কী ব্যবহার করে এমন একটি
InputActionঅবশ্যই একটি সংশোধক এবং একটি অ-সংশোধক কী দিয়ে গঠিত হতে হবে। উদাহরণস্বরূপ,শিফট + এ বৈধ কিন্তুক + খ ,Ctrl + Alt এর জন্য , এবংShift + A + ট্যাব না।দুই বা ততোধিক
InputActionঅথবাInputGroupঅবজেক্ট একই অনন্য ID শেয়ার করতে পারবে না।
আপগ্রেড করুন
ইনপুট SDK 1.1.1-beta ইনপুট SDK 1.0.0-beta এর সাথে ব্যাকওয়ার্ড সামঞ্জস্যপূর্ণ। ইনপুট SDK এর পূর্ববর্তী বাস্তবায়ন ব্যবহার করে এমন গেমগুলি এখনও বেসিক রিম্যাপিং সমর্থন করে, যদি না তারা একটি অসমর্থিত কনফিগারেশন ব্যবহার করে। যদি আপনার গেমটি ইনপুট SDK এর পূর্ববর্তী সংস্করণ ব্যবহার করে, তাহলে 0.0.4 থেকে 1.0.0-beta পর্যন্ত আপগ্রেড গাইডটি পড়ার কথা বিবেচনা করুন।
১.১.১-বিটাতে আপগ্রেড করলে নতুন বৈশিষ্ট্যগুলি অন্তর্ভুক্ত হবে যার মধ্যে রয়েছে:
- দৃশ্য নিয়ন্ত্রণ পরিবর্তনের সূত্রপাত ।
- কী ম্যাপিং ইভেন্টের বিজ্ঞপ্তি গ্রহণ ।
- অ্যাকশন, গ্রুপ, কনটেক্সট, অথবা ম্যাপ অনুসারে রিম্যাপিং অক্ষম করা হচ্ছে।
আপগ্রেড নির্ভরতা
যদি আপনি ইনপুট 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 ক্লাসের স্ট্যাটিক ফিল্ড হিসেবে সংজ্ঞায়িত করা একটি ভালো অভ্যাস কারণ এই ক্ষেত্রগুলি আপনার অ্যাপ্লিকেশনের অন্যান্য অংশ থেকে অ্যাক্সেসযোগ্য:
কোটলিন
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;
}
}
আপনার ইনপুটঅ্যাকশন আপডেট করুন
ইনপুট SDK 1.0.0-beta এর InputAction.create() পদ্ধতিটি বন্ধ করে দেওয়া হয়েছে। InputAction এখন একটি সংস্করণ শনাক্তকারী আছে এবং এটিকে পুনঃম্যাপযোগ্য বা না হিসেবে চিহ্নিত করা যেতে পারে। Input SDK 1.0.0-beta create() পদ্ধতি ব্যবহার করে সংজ্ঞায়িত একটি InputAction ডিফল্টরূপে পুনঃম্যাপযোগ্য এবং এতে সংস্করণ সংক্রান্ত তথ্যের অভাব রয়েছে:
ইনপুট SDK 1.0.0-বিটাতে ইনপুটঅ্যাকশন
কোটলিন
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()
)
);
ইনপুট SDK 1.1.1-বিটাতে ইনপুটঅ্যাকশন
কোটলিন
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
);
ইনপুট SDK 1.1.1-বিটাতে ইনপুটঅ্যাকশন (সংস্করণ স্ট্রিং সহ)
কোটলিন
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
);
আপনার কী বাইন্ডিংগুলির সংস্করণ সম্পর্কে আরও তথ্যের জন্য, ট্র্যাকিং কী আইডি দেখুন।
আপনার ইনপুটগ্রুপগুলি আপডেট করুন
Input SDK 1.1.1-beta তে আপনাকে প্রতিটি InputGroup অনন্যভাবে সনাক্ত করতে হবে। প্রতিটি InputAction একটি InputGroup এর অন্তর্গত -- সম্পর্কিত ক্রিয়াগুলির একটি সংগ্রহ। এটি গেমপ্লের সময় নিয়ন্ত্রণগুলির নেভিগেশন এবং আবিষ্কারযোগ্যতা উন্নত করে। একইভাবে InputAction একটি InputContext এর সমস্ত ক্রিয়াগুলির মধ্যে একটি অনন্য শনাক্তকারী থাকা আবশ্যক, একইভাবে একটি InputGroup বিদ্যমান গোষ্ঠীগুলিতে একটি অনন্য ID থাকা আবশ্যক।
এই বিভাগের উদাহরণগুলির জন্য, একটি গেমে দুটি InputContext অবজেক্ট থাকে যা প্রধান মেনু এবং গেমপ্লে উপস্থাপন করে। নিম্নলিখিত গণনা ব্যবহার করে এই প্রসঙ্গে প্রতিটি InputGroup এর জন্য উপযুক্ত ID ট্র্যাক করা হয়:
কোটলিন
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 1.0.0-beta এর InputGroup.create() পদ্ধতিটি বন্ধ করে দেওয়া হয়েছে। আপনার গেমে InputGroup একটি ভার্সন আইডেন্টিফায়ার এবং বুলিয়ান দিয়ে আপডেট করতে হবে যা নির্দেশ করবে যে আপনার গ্রুপের InputAction অবজেক্টগুলি রিম্যাপযোগ্য কিনা। অবহেলিত Input SDK 1.0.0-beta create() পদ্ধতি ব্যবহার করে তৈরি গ্রুপগুলি রিম্যাপযোগ্য, ID 0 থাকে এবং version ID একটি খালি স্ট্রিং ( "" ) হয়:
ইনপুট SDK 1.0.0-বিটাতে ইনপুটগ্রুপ
কোটলিন
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
)
);
ইনপুট SDK 1.1.1-বিটাতে ইনপুটগ্রুপ
কোটলিন
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
);
ইনপুট SDK 1.1.1-বিটাতে ইনপুটগ্রুপ (সংস্করণ স্ট্রিং সহ)
কোটলিন
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
);
আপনার কী বাইন্ডিংগুলির সংস্করণ সম্পর্কে আরও তথ্যের জন্য, ট্র্যাকিং কী আইডি দেখুন।
আপনার ইনপুটম্যাপ আপডেট করুন
ইনপুট SDK 1.0.0-beta এর InputMap.create() পদ্ধতিটি বন্ধ করা হয়েছে। একটি সংস্করণ শনাক্তকারী বরাদ্দ করতে আপনার InputMap আপডেট করুন, রিম্যাপিং বৈশিষ্ট্যটি সম্পূর্ণরূপে অপ্ট আউট করুন অথবা আপনার গেমের জন্য সংরক্ষিত কীগুলির একটি তালিকা বরাদ্দ করুন যা আপনি ব্যবহারকারী দ্বারা রিম্যাপিংয়ের জন্য ব্যবহার করতে চান না। ইনপুট SDK 1.0.0-beta create() পদ্ধতি ব্যবহার করে সংজ্ঞায়িত প্রতিটি InputMap ডিফল্টরূপে রিম্যাপযোগ্য, ID 0 দিয়ে চিহ্নিত করা হয় এবং এতে কোনও সংরক্ষিত কী থাকে না।
ইনপুট SDK 1.0.0-বিটাতে ইনপুটম্যাপ
কোটলিন
val gameInputMap = InputMap.create(
listOf(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false)
)
জাভা
InputMap gameInputMap = InputMap.create(
Arrays.asList(movementInputGroup, mouseMovementInputGroup),
MouseSettings.create(true, false)
);
ইনপুট SDK 1.1.1-বিটাতে ইনপুটম্যাপ
কোটলিন
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()
)
)
);
এরপর কি?
InputContexts ব্যবহার করে বিভিন্ন দৃশ্যের জন্য বিভিন্ন নিয়ন্ত্রণ বরাদ্দ করে অথবা InputRemappingListeners ব্যবহার করে ইভেন্ট রিম্যাপ করার বিষয়ে বিজ্ঞপ্তি পেয়ে আপনার গেমের UI আপডেট করে 1.1.1-বিটাতে আপনার আপগ্রেড চালিয়ে যান।
আপনার কী-বাইন্ডিং আপডেট করার সময় আপনার কী-বাইন্ডিং ডিজাইন করার জন্য সেরা অনুশীলনগুলি দেখুন এবং রিম্যাপিং বৈশিষ্ট্যের সীমাবদ্ধতা এবং সীমাবদ্ধতাগুলি বিবেচনা করুন।