এই নির্দেশিকায় ইউনিটির জন্য ইনপুট এসডিকে (Input SDK) ১.০ থেকে ১.১-এ আপনার গেমটি আপগ্রেড করার পদ্ধতি ব্যাখ্যা করা হয়েছে। জাভা এবং কোটলিনের নির্দেশাবলীর জন্য এখানে ক্লিক করুন ।
রিলিজ নোট
পিসিতে গুগল প্লে গেমস, ইনপুট এসডিকে ব্যবহার করে আপনার গেমের দেওয়া কী বাইন্ডিং অনুসারে কিবোর্ড কন্ট্রোল রিম্যাপ করা সমর্থন করে।
ব্যবহারকারীরা ওভারলে খুলে, কন্ট্রোলগুলো নির্বাচন করে এবং তারপরে যে অ্যাকশনটি রিম্যাপ করতে চান সেটিতে ক্লিক করে এই ফিচারটি অ্যাক্সেস করতে পারেন।
পিসিতে গুগল প্লে গেমস ব্যবহারকারীর রিম্যাপ করা প্রতিটি ইনপুটকে আপনার গেমের ডিফল্ট ইনপুটে ম্যাপ করে দেয়। এর ফলে, প্লেয়ারের এই রিম্যাপিং সম্পর্কে আপনার গেমকে জানতে হয় না। যদি গেমের ভেতরের কোনো কাজের জন্য, যেমন আপনার গেমে কিবোর্ড কন্ট্রোল দেখানোর জন্য, নতুন ইনপুটটি জানার প্রয়োজন হয়, তবে রিম্যাপিং ইভেন্টের নোটিফিকেশন পাওয়ার জন্য আপনি ঐচ্ছিকভাবে একটি কলব্যাক রেজিস্টার করতে পারেন।
পিসিতে গুগল প্লে গেমস ব্যবহারকারীর রিম্যাপ করা কন্ট্রোলগুলো গেমিং সেশন জুড়ে স্থায়ী রাখার জন্য স্থানীয়ভাবে সংরক্ষণ করে। যেহেতু এই সেটিংসগুলো স্থানীয়ভাবে সংরক্ষিত থাকে, তাই এগুলো মোবাইল অভিজ্ঞতার উপর কোনো প্রভাব ফেলে না এবং পিসিতে গুগল প্লে গেমস আনইনস্টল করার সাথে সাথে মুছে যায়। একাধিক পিসি ডিভাইসে এই সেটিংসগুলো স্থায়ী থাকে না।
আপনার গেমে কী রিম্যাপিং চালু করার জন্য ইনপুট এসডিকে আপগ্রেড করার প্রয়োজন নেই, কিন্তু কোনো অসমর্থিত কনফিগারেশন শনাক্ত হলে আপনার গেমের জন্য রিম্যাপিং নিষ্ক্রিয় হয়ে যাবে।
আপনি যদি ইনপুট রিম্যাপিং অভিজ্ঞতা নিয়ন্ত্রণ করতে চান অথবা আপনার গেমের জন্য রিম্যাপিং বৈশিষ্ট্যটি নিষ্ক্রিয় করা থাকে, তাহলে এই পদক্ষেপগুলি অনুসরণ করুন:
- ইনপুট এসডিকে
1.1.1-betaসংস্করণে আপগ্রেড করুন। - অসমর্থিত কনফিগারেশনগুলো এড়াতে যেকোনো কী-বাইন্ডিং আপডেট করুন।
- রিম্যাপিং বৈশিষ্ট্যটি সক্রিয় করতে আপনার
InputMapআপডেট করুন ।
আপনি যদি আপনার গেমের রিম্যাপিং ফিচারটি নিষ্ক্রিয় রাখতে চান এবং একই সাথে আপনার কী বাইন্ডিং-এর রিড-অনলি সংস্করণটি প্রদর্শন করতে চান, তাহলে এই ধাপগুলো অনুসরণ করুন:
- ইনপুট এসডিকে
1.1.1-betaসংস্করণে আপগ্রেড করুন। - রিম্যাপিং বৈশিষ্ট্যটি নিষ্ক্রিয় করতে আপনার
InputMapআপডেট করুন।
আপনি আপনার ইনপুট এসডিকে (Input SDK)-এর সংস্করণটি 1.1.1-beta তে আপগ্রেড করে পিসিতে গুগল প্লে গেমসের উন্নত রিম্যাপিং বৈশিষ্ট্যগুলির সুবিধা নিতে পারেন। এর মাধ্যমে আপনি InputContexts ব্যবহার করে আপনার গেমের বিভিন্ন দৃশ্যের জন্য নিয়ন্ত্রণ নির্ধারণ করতে, রিম্যাপিং ইভেন্ট শোনার জন্য কলব্যাক যোগ করতে, এমন কিছু সংরক্ষিত কী নির্ধারণ করতে পারেন যা ব্যবহারকারী রিম্যাপ করতে পারবে না এবং প্রতিটি InputAction , InputGroup বা InputMap জন্য রিম্যাপিং বৈশিষ্ট্যটি নিষ্ক্রিয় করতে পারেন।
আপগ্রেড করার সময় নিম্নলিখিত ব্যতিক্রমগুলি বিবেচনা করুন:
অসমর্থিত কনফিগারেশন
নিম্নলিখিত শর্তগুলো পূরণ না হলে ইনপুট রিম্যাপিং নিষ্ক্রিয় থাকে:
যে
InputActionএকাধিক কী ব্যবহার করে, তা অবশ্যই একটি মডিফায়ার এবং একটি নন-মডিফায়ার কী দ্বারা গঠিত হতে হবে। উদাহরণস্বরূপ,শিফট + এ বৈধ কিন্তুএ + বি ,Ctrl + Alt এবংShift + A + Tab অবৈধ।দুই বা ততোধিক
InputActionবাInputGroupঅবজেক্ট একই অনন্য আইডি ব্যবহার করতে পারে না।
ইনপুটকনটেক্সট চালু করা হচ্ছে
একটি InputContext একটি গেমকে কোনো দ্বন্দ্ব ছাড়াই বিভিন্ন কাজের জন্য একই কী ব্যবহার করার সুযোগ দেয়। এইভাবে, যদি কোনো গেম খেলার সময় লাফানোর জন্য এবং মেনু থেকে কোনো কিছু নির্বাচন নিশ্চিত করার জন্য স্পেস কী ব্যবহার করে, তবে খেলোয়াড়রা সেগুলোকে আলাদাভাবে রিম্যাপ করতে পারে।
নিম্নলিখিত সিকোয়েন্স ডায়াগ্রামটি দেখায় কিভাবে setInputContext() API রানটাইমে কাজ করে:

আপগ্রেড
ইনপুট এসডিকে-র পূর্ববর্তী সংস্করণ ব্যবহারকারী গেমগুলি এখনও বেসিক রিম্যাপিং সমর্থন করে, যদি না সেগুলি কোনো অসমর্থিত কনফিগারেশন ব্যবহার করে। যদি আপনার গেমটি ইনপুট এসডিকে-র কোনো পুরোনো সংস্করণ ব্যবহার করে, তবে 0.0.4 থেকে 1.0.0-beta-তে আপগ্রেড করার নির্দেশিকাটি পড়ে দেখতে পারেন।
1.1.1-বিটা সংস্করণে আপগ্রেড করলে নিম্নলিখিত নতুন বৈশিষ্ট্যগুলো যুক্ত হবে:
- প্রসঙ্গ পরিবর্তন শুরু করা।
- গুরুত্বপূর্ণ ম্যাপিং ইভেন্টগুলির বিজ্ঞপ্তি গ্রহণ করা
- প্রতিটি অ্যাকশন, গ্রুপ, কনটেক্সট বা ম্যাপের জন্য রিম্যাপিং নিষ্ক্রিয় করা।
ইনস্টলেশন
ইউনিটি প্লাগইন v1.1.1-beta এখন আপনার ব্যবহারের জন্য উপলব্ধ। আপনাকে আপনার গেমে ইনস্টল করা ইনপুট এসডিকে-র পূর্ববর্তী সংস্করণগুলি মুছে ফেলতে হবে এবং বর্তমান সংস্করণে আপগ্রেড করতে হবে।
আপনার গেমে ইনপুট এসডিকে ভি১.১.১-বিটা যোগ করতে, এসডিকে যোগ করা দেখুন।
স্থির ক্ষেত্রগুলি সংজ্ঞায়িত করুন
সংস্করণ 1.1.1-beta-এর জন্য আপনার InputActions , InputGroups , InputContexts এবং InputMap কে আপনার InputMappingProvider ক্লাসের স্ট্যাটিক ফিল্ড হিসেবে সংজ্ঞায়িত করা একটি ভালো অভ্যাস, কারণ এই ফিল্ডগুলো আপনার অ্যাপ্লিকেশনের অন্যান্য অংশ থেকে অ্যাক্সেসযোগ্য হবে:
#if PLAY_GAMES_PC
using Java.Lang;
using Java.Util;
using Google.Android.Libraries.Play.Games.Inputmapping;
using Google.Android.Libraries.Play.Games.Inputmapping.Datamodel;
public class InputSDKMappingProvider : InputMappingProviderCallbackHelper
{
public static readonly string INPUT_MAP_VERSION = "1.0.0";
private static readonly InputAction driveInputAction =
InputAction.Create(...);
private static readonly InputGroup roadInputGroup = InputGroup.Create(...);
public static readonly InputContext roadControlsContext =
InputContext.Create(...);
public static readonly InputMap inputMap = InputMap.Create(...);
public override InputMap OnProvideInputMap()
{
return inputMap;
}
}
#endif
আপনার ইনপুট অ্যাকশনগুলি আপডেট করুন
Input SDK 1.0.0-beta এর InputAction.create() মেথডটি এখন আর ব্যবহার করা হয় না। একটি InputAction একটি ভার্সন আইডেন্টিফায়ার থাকে এবং এটিকে রিম্যাপেবল হিসেবে চিহ্নিত করা যায় বা নাও করা যেতে পারে। Input SDK 1.0.0-beta create() মেথড ব্যবহার করে সংজ্ঞায়িত একটি InputAction ডিফল্টরূপে রিম্যাপেবল হয় এবং এতে ভার্সনিং তথ্য থাকে না:
ইনপুট এসডিকে ১.০.০-বিটা-তে ইনপুটঅ্যাকশন
var driveAction = PlayInputAction.Create(
"Drive",
(long)InputEventIds.DRIVE,
PlayInputControls.Create(
new[] { AndroidKeyCode.KEYCODE_SPACE },
new List<PlayMouseAction>()
)
);
ইনপুট এসডিকে ১.১.১-বিটা-তে ইনপুটঅ্যাকশন
private static readonly InputAction driveInputAction = InputAction.Create(
"Drive",
(long)InputEventIds.DRIVE,
InputControls.Create(
new[] { new Integer(AndroidKeyCode.KEYCODE_SPACE) }.ToJavaList(),
new ArrayList<Integer>()),
InputEnums.REMAP_OPTION_ENABLED
);
ইনপুট এসডিকে ১.১.১-বিটা (সংস্করণ স্ট্রিং সহ) এর ইনপুটঅ্যাকশন
private static readonly InputAction driveInputAction = InputAction.Create(
"Drive",
InputControls.Create(
new[] { new Integer(AndroidKeyCode.KEYCODE_SPACE) }.ToJavaList(),
new ArrayList<Integer>()),
InputIdentifier.Create(
INPUT_MAP_VERSION, (long)InputEventIds.DRIVE),
InputEnums.REMAP_OPTION_ENABLED
);
আপনার কী বাইন্ডিংগুলির ভার্সনিং সম্পর্কে আরও তথ্যের জন্য, ‘কী আইডি ট্র্যাকিং’ দেখুন।
আপনার ইনপুটগ্রুপগুলি আপডেট করুন
ইনপুট এসডিকে 1.1.1-beta তে আপনাকে প্রতিটি InputGroup স্বতন্ত্রভাবে শনাক্ত করতে হবে। প্রতিটি InputAction একটি InputGroup অন্তর্গত—যা হলো সম্পর্কিত অ্যাকশনগুলোর একটি সংগ্রহ। এটি গেমপ্লে চলাকালীন কন্ট্রোলগুলোর নেভিগেশন এবং খুঁজে পাওয়ার সুবিধা উন্নত করে। ঠিক যেমন একটি একক InputContext এর সমস্ত অ্যাকশনের মধ্যে একটি InputAction একটি অনন্য শনাক্তকারী থাকা আবশ্যক, তেমনি বিদ্যমান গ্রুপগুলোর মধ্যে একটি InputGroup একটি অনন্য আইডি থাকা আবশ্যক।
এই বিভাগের উদাহরণগুলির জন্য, একটি গেমে দুটি InputContext অবজেক্ট থাকে যা প্রধান মেনু এবং গেমপ্লেকে উপস্থাপন করে। এই কনটেক্সটগুলির প্রতিটি InputGroup জন্য উপযুক্ত আইডিগুলি নিম্নলিখিত এনুমারেশন ব্যবহার করে ট্র্যাক করা হয়:
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() মেথডটিও ডেপ্রিকেটেড (deprecated) করা হয়েছে। আপনাকে অবশ্যই আপনার গেমে থাকা InputGroup একটি ভার্সন আইডেন্টিফায়ার এবং একটি বুলিয়ান ভ্যালু দিয়ে আপডেট করতে হবে, যা নির্দেশ করবে যে আপনার গ্রুপের InputAction অবজেক্টগুলো রিম্যাপেবল (remappable) কিনা। ডেপ্রিকেটেড Input SDK 1.0.0-beta create() মেথড দিয়ে তৈরি করা গ্রুপগুলো রিম্যাপেবল হয়, সেগুলোর আইডি (ID) হয় 0, এবং ভার্সন আইডি একটি খালি স্ট্রিং ( "" ) হয়:
ইনপুট এসডিকে ১.০.০-বিটা-তে ইনপুটগ্রুপ
var gameInputGroup = PlayInputGroup.Create(
"Road controls",
new List<PlayInputAction>
{
driveAction,
turboAction,
openGarageAction,
openPgsAction,
openStoreAction
}
);
ইনপুট এসডিকে ১.১.১-বিটা-তে ইনপুটগ্রুপ
private static readonly InputGroup roadInputGroup = InputGroup.Create(
"Road controls",
new[]
{
driveInputAction,
turboInputAction,
openGarageInputAction,
openPgsInputAction,
openStoreInputAction,
}.ToJavaList(),
(long)InputGroupsIds.ROAD_CONTROLS,
// All input actions of this group will be remappable unless specified
// the contrary by the individual input actions.
InputEnums.REMAP_OPTION_ENABLED
);
ইনপুট এসডিকে ১.১.১-বিটা (সংস্করণ স্ট্রিং সহ) এর ইনপুটগ্রুপ
private static readonly InputGroup roadInputGroup = InputGroup.Create(
"Road controls",
new[]
{
driveInputAction,
turboInputAction,
openGarageInputAction,
openPgsInputAction,
openStoreInputAction,
}.ToJavaList(),
InputIdentifier.Create(
INPUT_MAP_VERSION, (long)InputGroupsIds.ROAD_CONTROLS),
// All input actions of this group will be remappable unless specified
// the contrary by the individual input actions.
InputEnums.REMAP_OPTION_ENABLED
);
আপনার কী বাইন্ডিংগুলির ভার্সনিং সম্পর্কে আরও তথ্যের জন্য, ‘কী আইডি ট্র্যাকিং’ দেখুন।
আপনার ইনপুটম্যাপ আপডেট করুন
Input SDK 1.0.0-beta এর InputMap.create() মেথডটি এখন আর ব্যবহার করা হয় না। আপনার InputMap আপডেট করে একটি ভার্সন আইডেন্টিফায়ার নির্ধারণ করুন, রিম্যাপিং ফিচারটি থেকে সম্পূর্ণভাবে বেরিয়ে আসুন অথবা আপনার গেমের জন্য সংরক্ষিত কী-গুলোর একটি তালিকা নির্ধারণ করুন, যেগুলো আপনি ব্যবহারকারীকে রিম্যাপিংয়ের জন্য ব্যবহার করতে দিতে চান না। Input SDK 1.0.0-beta create() মেথড ব্যবহার করে সংজ্ঞায়িত প্রতিটি InputMap ডিফল্টরূপে রিম্যাপযোগ্য, ID 0 দ্বারা চিহ্নিত এবং এতে কোনো সংরক্ষিত কী নেই।
ইনপুট এসডিকে ১.০.০-বিটা-তে ইনপুটম্যাপ
var gameInputMap = PlayInputMap.Create(
new List<PlayInputGroup>
{
gameInputGroup,
menuInputGroup
},
PlayMouseSettings.Create(false, false)
);
ইনপুট এসডিকে ১.১.১-বিটা-তে ইনপুটম্যাপ
public static readonly string INPUT_MAP_VERSION = "1.0.0";
public static readonly long INPUT_MAP_ID = 0;
public static readonly InputMap inputMap = InputMap.Create(
new[] { roadInputGroup, menuInputGroup }.ToJavaList(),
MouseSettings.Create(false, false),
InputIdentifier.Create(INPUT_MAP_VERSION, INPUT_MAP_ID),
// Use ESC as reserved key
InputEnums.REMAP_OPTION_ENABLED,
new[]
{
InputControls.Create(new[]
{
new Integer(AndroidKeyCode.KEYCODE_ESCAPE)
}.ToJavaList(),
new ArrayList<Integer>())
}.ToJavaList()
);
এরপর কী?
InputContexts ব্যবহার করে বিভিন্ন দৃশ্যের জন্য আলাদা আলাদা কন্ট্রোল নির্ধারণ করে অথবা InputRemappingListeners ব্যবহার করে রিম্যাপিং ইভেন্টের নোটিফিকেশন পেয়ে আপনার গেমের UI আপডেট করার মাধ্যমে 1.1.1-beta-তে আপনার আপগ্রেড চালিয়ে যান।
আপনার কী-বাইন্ডিং আপডেট করার সময় , কী-বাইন্ডিং ডিজাইন করার সর্বোত্তম পদ্ধতিগুলো দেখে নিন এবং রিম্যাপিং ফিচারের সীমাবদ্ধতাগুলো বিবেচনা করুন।