এই নির্দেশিকাটি ব্যাখ্যা করে কিভাবে আপনার গেমটি 1.0 থেকে 1.1 ইনপুট SDK for Unity তে আপগ্রেড করবেন। জাভা এবং কোটলিন নির্দেশাবলীর জন্য এখানে ক্লিক করুন ।
রিলিজ নোটস
পিসিতে গুগল প্লে গেমস ইনপুট 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 প্রতি রিম্যাপিং বৈশিষ্ট্যটি অক্ষম করতে পারেন।
আপগ্রেড করার সময় নিম্নলিখিত ব্যতিক্রমগুলি বিবেচনা করুন:
অসমর্থিত কনফিগারেশন
নিম্নলিখিত শর্তগুলি পূরণ না হলে ইনপুট রিম্যাপিং অক্ষম করা হয়:
একটি
InputActionযা একাধিক কী ব্যবহার করে তা অবশ্যই একটি সংশোধক এবং একটি অ-সংশোধক কী দিয়ে গঠিত হতে হবে। উদাহরণস্বরূপ,শিফট + এ বৈধ কিন্তুক + খ ,Ctrl + Alt এর জন্য , এবংShift + A + ট্যাব অবৈধ।দুই বা ততোধিক
InputActionঅথবাInputGroupঅবজেক্ট একই অনন্য ID শেয়ার করতে পারবে না।
ইনপুটকন্টেক্সট উপস্থাপন করা হচ্ছে
একটি InputContext একটি গেমকে আপনার গেমের বিভিন্ন অ্যাকশনের জন্য একই কী ব্যবহার করতে দেয়, কোনও দ্বন্দ্ব ছাড়াই। এইভাবে, যদি কোনও গেম গেমপ্লে চলাকালীন লাফ দেওয়ার জন্য এবং মেনু নির্বাচন নিশ্চিত করার জন্য স্থান ব্যবহার করে, তাহলে খেলোয়াড়রা পৃথকভাবে রিম্যাপ করতে সক্ষম হবে।
নিচের সিকোয়েন্স ডায়াগ্রামটি দেখায় যে রানটাইমে setInputContext() API কীভাবে কাজ করে:

আপগ্রেড করুন
ইনপুট SDK-এর পূর্ববর্তী বাস্তবায়ন ব্যবহার করে এমন গেমগুলি এখনও মৌলিক রিম্যাপিং সমর্থন করে, যদি না তারা একটি অসমর্থিত কনফিগারেশন ব্যবহার করে। যদি আপনার গেমটি ইনপুট SDK-এর একটি পুরানো সংস্করণ ব্যবহার করে, তাহলে 0.0.4 থেকে 1.0.0-beta পর্যন্ত আপগ্রেড গাইডটি পড়ার কথা বিবেচনা করুন।
১.১.১-বিটাতে আপগ্রেড করলে নতুন বৈশিষ্ট্যগুলি সক্রিয় হয়, যার মধ্যে রয়েছে:
- প্রেক্ষাপট পরিবর্তনের সূত্রপাত।
- কী ম্যাপিং ইভেন্টের বিজ্ঞপ্তি গ্রহণ করা
- অ্যাকশন, গ্রুপ, কনটেক্সট, অথবা ম্যাপ অনুসারে রিম্যাপিং অক্ষম করা হচ্ছে।
স্থাপন
ইউনিটি প্লাগইন v1.1.1-beta আপনার ব্যবহারের জন্য উপলব্ধ। আপনার গেমে ইনস্টল করা ইনপুট SDK-এর পূর্ববর্তী যেকোনো সংস্করণ মুছে ফেলতে হবে এবং বর্তমান সংস্করণে আপগ্রেড করতে হবে।
আপনার গেমে ইনপুট SDK v1.1.1-বিটা যোগ করতে, SDK যোগ করা দেখুন।
স্ট্যাটিক ফিল্ড নির্ধারণ করুন
১.১.১-বিটা সংস্করণের জন্য আপনার 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
আপনার ইনপুটঅ্যাকশন আপডেট করুন
ইনপুট SDK 1.0.0-beta এর InputAction.create() পদ্ধতিটি বন্ধ করে দেওয়া হয়েছে। InputAction এর একটি সংস্করণ শনাক্তকারী থাকে এবং এটিকে পুনঃম্যাপযোগ্য বা না হিসেবে চিহ্নিত করা যেতে পারে। Input SDK 1.0.0-beta create() পদ্ধতি ব্যবহার করে সংজ্ঞায়িত একটি InputAction ডিফল্টরূপে পুনঃম্যাপযোগ্য এবং এতে সংস্করণ সংক্রান্ত তথ্যের অভাব রয়েছে:
ইনপুট SDK 1.0.0-বিটাতে ইনপুটঅ্যাকশন
var driveAction = PlayInputAction.Create(
"Drive",
(long)InputEventIds.DRIVE,
PlayInputControls.Create(
new[] { AndroidKeyCode.KEYCODE_SPACE },
new List<PlayMouseAction>()
)
);
ইনপুট SDK 1.1.1-বিটাতে ইনপুটঅ্যাকশন
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
);
ইনপুট SDK 1.1.1-বিটাতে ইনপুটঅ্যাকশন (সংস্করণ স্ট্রিং সহ)
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
);
আপনার কী বাইন্ডিংগুলির সংস্করণ সম্পর্কে আরও তথ্যের জন্য, ট্র্যাকিং কী আইডি দেখুন।
আপনার ইনপুটগ্রুপগুলি আপডেট করুন
Input SDK 1.1.1-beta তে আপনাকে প্রতিটি InputGroup অনন্যভাবে সনাক্ত করতে হবে। প্রতিটি InputAction একটি InputGroup এর অন্তর্গত -- সম্পর্কিত ক্রিয়াগুলির একটি সংগ্রহ। এটি গেমপ্লের সময় নিয়ন্ত্রণগুলির নেভিগেশন এবং আবিষ্কারযোগ্যতা উন্নত করে। ঠিক যেমন একটি InputAction একটি InputContext এর সমস্ত ক্রিয়াগুলির মধ্যে একটি অনন্য শনাক্তকারী থাকতে হবে, তেমনি একটি InputGroup বিদ্যমান গোষ্ঠীগুলিতে একটি অনন্য ID থাকতে হবে।
এই বিভাগের উদাহরণগুলির জন্য, একটি গেমে দুটি InputContext অবজেক্ট থাকে যা প্রধান মেনু এবং গেমপ্লে উপস্থাপন করে। নিম্নলিখিত গণনা ব্যবহার করে এই প্রসঙ্গে প্রতিটি InputGroup এর জন্য উপযুক্ত ID ট্র্যাক করা হয়:
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-বিটাতে ইনপুটগ্রুপ
var gameInputGroup = PlayInputGroup.Create(
"Road controls",
new List<PlayInputAction>
{
driveAction,
turboAction,
openGarageAction,
openPgsAction,
openStoreAction
}
);
ইনপুট SDK 1.1.1-বিটাতে ইনপুটগ্রুপ
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
);
ইনপুট SDK 1.1.1-বিটাতে ইনপুটগ্রুপ (সংস্করণ স্ট্রিং সহ)
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
);
আপনার কী বাইন্ডিংগুলির সংস্করণ সম্পর্কে আরও তথ্যের জন্য, ট্র্যাকিং কী আইডি দেখুন।
আপনার ইনপুটম্যাপ আপডেট করুন
ইনপুট SDK 1.0.0-beta এর InputMap.create() পদ্ধতিটি বন্ধ করে দেওয়া হয়েছে। আপনার InputMap আপডেট করে একটি ভার্সন আইডেন্টিফায়ার অ্যাসাইন করুন, রিম্যাপিং ফিচার থেকে সম্পূর্ণভাবে অপ্ট আউট করুন অথবা আপনার গেমের জন্য সংরক্ষিত কীগুলির একটি তালিকা অ্যাসাইন করুন যা আপনি ব্যবহারকারী রিম্যাপিংয়ের জন্য ব্যবহার করতে চান না। ইনপুট SDK 1.0.0-beta create() পদ্ধতি ব্যবহার করে সংজ্ঞায়িত প্রতিটি InputMap ডিফল্টরূপে রিম্যাপযোগ্য, ID 0 দিয়ে শনাক্ত করা হয় এবং এতে কোনও সংরক্ষিত কী থাকে না।
ইনপুট SDK 1.0.0-বিটাতে ইনপুটম্যাপ
var gameInputMap = PlayInputMap.Create(
new List<PlayInputGroup>
{
gameInputGroup,
menuInputGroup
},
PlayMouseSettings.Create(false, false)
);
ইনপুট SDK 1.1.1-বিটাতে ইনপুটম্যাপ
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-বিটাতে আপনার আপগ্রেড চালিয়ে যান।
আপনার কী-বাইন্ডিং আপডেট করার সময় আপনার কী-বাইন্ডিং ডিজাইন করার জন্য সেরা অনুশীলনগুলি দেখুন এবং রিম্যাপিং বৈশিষ্ট্যের সীমাবদ্ধতা এবং সীমাবদ্ধতাগুলি বিবেচনা করুন।