এই নির্দেশিকাটি ব্যাখ্যা করে যে কীভাবে আপনার গেমটি জাভা এবং কোটলিনের জন্য 1.0.0-বিটা ইনপুট SDK থেকে 1.1.0-বিটাতে আপগ্রেড করবেন৷ ইউনিটি নির্দিষ্ট নির্দেশাবলীর জন্য ইউনিটি আপগ্রেড গাইড দেখুন।
রিলিজ নোট
আপনার গেম ইনপুট SDK ব্যবহার করে যে কী বাইন্ডিংগুলি প্রদান করে তার উপর ভিত্তি করে পিসিতে Google Play গেমগুলি কীবোর্ড নিয়ন্ত্রণের রিম্যাপিং সমর্থন করে৷
ব্যবহারকারীরা ওভারলে খোলার মাধ্যমে, নিয়ন্ত্রণ নির্বাচন করে, এবং তারপরে তারা যে ক্রিয়াটি রিম্যাপ করতে চান তাতে ক্লিক করে এই বৈশিষ্ট্যটি অ্যাক্সেস করে৷
পিসিতে গুগল প্লে গেমস আপনার গেমের ডিফল্ট ইনপুটে প্রতিটি ব্যবহারকারীর-রিম্যাপ করা ইনপুট ম্যাপ করে। এইভাবে আপনার গেমটিকে প্লেয়ারের রিম্যাপিং সম্পর্কে সচেতন হতে হবে না। আপনার যদি একটি ইন-গেম অ্যাকশনের জন্য নতুন ইনপুট জানার প্রয়োজন হয়, যেমন আপনার গেমে কীবোর্ড নিয়ন্ত্রণগুলি প্রদর্শন করা, আপনি ঐচ্ছিকভাবে ইভেন্ট রিম্যাপ করার জন্য বিজ্ঞপ্তি পাওয়ার জন্য একটি কলব্যাক নিবন্ধন করতে পারেন।
পিসিতে Google Play গেমগুলি প্রতিটি ব্যবহারকারীর রিম্যাপ করা নিয়ন্ত্রণ স্থানীয়ভাবে সঞ্চয় করে যাতে তারা গেমিং সেশন জুড়ে অবিচল থাকে। যেহেতু এটি স্থানীয়ভাবে সংরক্ষণ করা হয়, তাই এটি মোবাইল অভিজ্ঞতাকে প্রভাবিত করে না এবং পিসিতে Google Play Games আনইনস্টল করার পরে মুছে ফেলা হয়। একাধিক পিসি ডিভাইস জুড়ে নিয়ন্ত্রণ সেটিংস স্থায়ী হয় না।
আপনার গেমে কী রিম্যাপিং সক্ষম করতে আপনাকে ইনপুট SDK আপগ্রেড করার দরকার নেই, তবে যদি একটি অসমর্থিত কনফিগারেশন সনাক্ত করা হয় তবে আপনার গেমের জন্য রিম্যাপিং অক্ষম করা যেতে পারে।
আপনি যদি ইনপুট রিম্যাপিং অভিজ্ঞতা নিয়ন্ত্রণ করতে চান, বা যদি আপনার গেমের জন্য রিম্যাপিং বৈশিষ্ট্যটি অক্ষম করা থাকে, তাহলে সমাধান করতে নিম্নলিখিত পদক্ষেপগুলি সম্পাদন করুন:
- ইনপুট SDK
1.1.0-beta
আপগ্রেড করুন৷ - অসমর্থিত কনফিগারেশন এড়াতে যেকোনো কীবাইন্ডিং আপডেট করুন।
- রিম্যাপিং বৈশিষ্ট্যটি সক্ষম করতে সেট করতে আপনার
InputMap
আপডেট করুন৷
আপনি যদি আপনার কী বাইন্ডিংয়ের একমাত্র-পঠন সংস্করণ প্রদর্শন করার সময় আপনার গেমের জন্য রিম্যাপিং বৈশিষ্ট্যটি অপ্ট-আউট করতে চান তবে এই পদক্ষেপগুলি অনুসরণ করুন:
- ইনপুট SDK
1.1.0-beta
আপগ্রেড করুন৷ - রিম্যাপিং বৈশিষ্ট্যটিকে নিষ্ক্রিয় করতে সেট করতে আপনার
InputMap
আপডেট করুন৷
আপনার গেমের বিভিন্ন দৃশ্যের জন্য নিয়ন্ত্রণ সংজ্ঞায়িত করার জন্য InputContexts
ব্যবহার করে PC-তে Google Play Games-এ উন্নত রিম্যাপিং বৈশিষ্ট্যের সুবিধা নিতে আপনি আপনার ইনপুট SDK-এর সংস্করণটিকে 1.1.0-beta
আপগ্রেড করতে পারেন, ইভেন্ট রিম্যাপ করার জন্য শোনার জন্য কলব্যাক যোগ করুন, সংজ্ঞায়িত করুন সংরক্ষিত কীগুলির একটি সেট যা ব্যবহারকারী রিম্যাপ করতে পারে না এবং InputAction
, InputGroup
বা InputMap
প্রতি রিম্যাপিং বৈশিষ্ট্য নিষ্ক্রিয় করে।
নতুন SDK সংস্করণে আপগ্রেড করার সময় নিম্নলিখিত ব্যতিক্রমগুলি বিবেচনা করুন:
অসমর্থিত কনফিগারেশন
নিম্নলিখিত শর্ত পূরণ না হলে ইনপুট রিম্যাপিং অক্ষম করা হয়:
একাধিক কী ব্যবহার করে একটি
InputAction
অবশ্যই একটি সংশোধক এবং নন-সংশোধনকারী কী নিয়ে গঠিত হতে হবে। যেমন,Shift + A বৈধ কিন্তুA + B ,Ctrl + Alt , এবংShift + A + Tab হয় নাদুই বা ততোধিক
InputAction
বাInputGroup
অবজেক্ট একই অনন্য ID শেয়ার করতে পারে না।
আপগ্রেড করুন
ইনপুট 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
ক্লাসের স্ট্যাটিক ক্ষেত্র হিসাবে সংজ্ঞায়িত করা একটি ভাল অনুশীলন কারণ এই ক্ষেত্রগুলি আপনার অ্যাপ্লিকেশনের অন্যান্য অংশ থেকে অ্যাক্সেসযোগ্য:
কোটলিন
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 আপডেট করুন
ইনপুট SDK 1.0.0-beta
এর InputAction.create()
পদ্ধতিটি বাতিল করা হয়েছে৷ একটি InputAction
এখন একটি সংস্করণ শনাক্তকারী রয়েছে এবং এটি পুনরায় ব্যবহারযোগ্য বা না হিসাবে চিহ্নিত করা যেতে পারে। ইনপুট 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.0-বিটাতে ইনপুট অ্যাকশন
কোটলিন
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.0-বিটাতে InputAction (সংস্করণ স্ট্রিং সহ)
কোটলিন
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
);
আপনার কী বাইন্ডিংয়ের সংস্করণ সম্পর্কে আরও তথ্যের জন্য, ট্র্যাকিং কী আইডি দেখুন।
আপনার ইনপুট গ্রুপ আপডেট করুন
ইনপুট SDK 1.1.0-beta
আপনাকে প্রতিটি InputGroup
স্বতন্ত্রভাবে সনাক্ত করতে হবে। প্রতিটি InputAction
একটি InputGroup
অন্তর্গত -- সম্পর্কিত ক্রিয়াগুলির একটি সংগ্রহ৷ এটি গেমপ্লে চলাকালীন নিয়ন্ত্রণগুলির নেভিগেশন এবং আবিষ্কারযোগ্যতা উন্নত করে। একইভাবে InputAction
একটি একক InputContext
এর সমস্ত ক্রিয়াগুলির মধ্যে একটি অনন্য শনাক্তকারী থাকা আবশ্যক, একটি InputGroup
বিদ্যমান গোষ্ঠীগুলির মধ্যে একটি অনন্য ID থাকতে হবে৷
এই বিভাগে উদাহরণের জন্য, একটি গেমের প্রধান মেনু এবং গেমপ্লে প্রতিনিধিত্বকারী দুটি InputContext
বস্তু রয়েছে। নিম্নলিখিত গণনা ব্যবহার করে এই প্রসঙ্গে প্রতিটি InputGroup
জন্য উপযুক্ত আইডি ট্র্যাক করা হয়:
কোটলিন
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
এর মতো, ইনপুট SDK 1.0.0-beta
এর InputGroup.create()
পদ্ধতি অবচয় করা হয়েছে। আপনাকে অবশ্যই আপনার গেমে আপনার InputGroup
আপডেট করতে হবে একটি সংস্করণ শনাক্তকারী এবং বুলিয়ানের সাহায্যে যা নির্দেশ করে যে আপনার গ্রুপের InputAction
অবজেক্টগুলি রিম্যাপযোগ্য কিনা৷ অপ্রচলিত ইনপুট SDK 1.0.0-beta
create()
পদ্ধতির সাহায্যে তৈরি করা গোষ্ঠীগুলি পুনঃম্যাপযোগ্য, আইডি 0 আছে এবং সংস্করণ আইডি একটি খালি স্ট্রিং ( ""
):
ইনপুট 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.0-বিটাতে ইনপুট গ্রুপ
কোটলিন
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.0-বিটাতে ইনপুট গ্রুপ (সংস্করণ স্ট্রিং সহ)
কোটলিন
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
ডিফল্টরূপে রিম্যাপযোগ্য, আইডি 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.0-বিটাতে ইনপুটম্যাপ
কোটলিন
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.0-বিটাতে আপগ্রেড চালিয়ে যান।
আপনার কী-বাইন্ডিংগুলি আপডেট করার সময় আপনার কী বাইন্ডিংগুলি ডিজাইন করার জন্য সর্বোত্তম অনুশীলনগুলি দেখুন এবং রিম্যাপিং বৈশিষ্ট্যের সীমাবদ্ধতা এবং সীমাবদ্ধতাগুলি বিবেচনা করুন৷