Unity-এর জন্য Input SDK-কে ভার্সন 1.1-এ আপগ্রেড করুন

এই গাইড থেকে আপনি জানতে পারবেন কীভাবে Unity-এর জন্য 1.0 থেকে 1.1 Input SDK-তে আপনার গেম আপগ্রেড করবেন। Java ও Kotlin-এর নির্দেশাবলীর জন্য এখানে ক্লিক করুন।

রিলিজ নোট

পিসি (PC)-তে Google Play Games, Input SDK ব্যবহার করে আপনার গেমের দেওয়া কী বাইন্ডিংয়ের উপর ভিত্তি করে কীবোর্ড কন্ট্রোল রিম্যাপিং কাজ করে।

ব্যবহারকারীরা ওভারলে খুলে, কন্ট্রোল বেছে নিয়ে এবং তারপরে যে অ্যাকশন আবার ম্যাপ করতে চান সেটিতে ক্লিক করে এই ফিচার অ্যাক্সেস করেন।

পিসি (PC)-তে Google Play Games, ব্যবহারকারীর রিম্যাপ করা প্রতিটি ইনপুটকে আপনার গেমের ডিফল্ট ইনপুটের সাথে ম্যাপ করে। এইভাবে, আপনার গেমকে প্লেয়ারের রিম্যাপিং সম্পর্কে জানতে হবে না। ইন-গেম অ্যাকশনের জন্য নতুন ইনপুট সম্পর্কে আপনার জানার প্রয়োজন হলে, যেমন, আপনার গেমে কিবোর্ড কন্ট্রোল দেখানো, তাহলে আপনি ঐচ্ছিকভাবে রিম্যাপিং ইভেন্টের নোটিফিকেশন পেতে কলব্যাক রেজিস্টার করতে পারেন।

Google Play Games on PC, গেমিং সেশন জুড়ে ব্যবহারকারীর রিম্যাপ করা কন্ট্রোল লোকালি সেভ করে রাখে। যেহেতু এইসব সেটিংস লোকালি সেভ করা হয়, তাই সেগুলি মোবাইল অভিজ্ঞতাকে প্রভাবিত করে না এবং পিসি (PC)-তে Google Play Games আনইনস্টল করলে মুছে যায়। একাধিক পিসি ডিভাইস জুড়ে সেটিংস সেভ থাকে না।

আপনার গেমে কী রিম্যাপিং চালু করতে Input SDK আপগ্রেড করার প্রয়োজন নেই, তবে কোনও কাজ করে না এমন কনফিগারেশন শনাক্ত করা হলে আপনার গেমের জন্য রিম্যাপিং বন্ধ করা হবে।

ইনপুট রিম্যাপিং অভিজ্ঞতা কন্ট্রোল করতে চাইলে অথবা আপনার গেমের জন্য রিম্যাপিং ফিচার বন্ধ করা থাকলে, এইসব ধাপ অনুসরণ করুন:

আপনি যদি নিজের গেমের জন্য রিম্যাপিং ফিচার থেকে অপ্ট-আউট করতে চান, তবে এখনও আপনার কী বাইন্ডিংয়ের রিড-অনলি ভার্সন দেখাচ্ছেন, তাহলে এইসব ধাপ অনুসরণ করুন:

  • Input SDK 1.1.1-beta-এ আপগ্রেড করুন।
  • রিম্যাপিং ফিচার বন্ধ করতে আপনার InputMap আপডেট করুন।

আপনি Input SDK-এর ভার্সন আপগ্রেড করে 1.1.1-beta, Google Play Games-এ পিসি (PC)-তে উন্নত রিম্যাপিং ফিচার ব্যবহার করতে পারেন। এর জন্য InputContexts ব্যবহার করে আপনার গেমের বিভিন্ন দৃশ্যের জন্য কন্ট্রোল নির্ধারণ করুন, রিম্যাপিং ইভেন্ট শোনার জন্য কলব্যাক যোগ করুন, রিজার্ভ করা কীগুলির একটি সেট নির্ধারণ করুন যা ব্যবহারকারী রিম্যাপ করতে পারবেন না এবং InputAction, InputGroup বা InputMap অনুযায়ী রিম্যাপিং ফিচার বন্ধ করুন।

আপগ্রেড করার সময় নিম্নলিখিত ব্যতিক্রমগুলি বিবেচনা করুন:

কাজ করে না এমন কনফিগারেশন

নিম্নলিখিত শর্ত পূরণ না হলে ইনপুট রিম্যাপিং বন্ধ করা হয়:

  • একাধিক কী ব্যবহার করে এমন InputAction-এ অবশ্যই একটি মডিফায়ার ও একটি নন-মডিফায়ার কী থাকতে হবে। যেমন, Shift + A হল বৈধ, কিন্তু A + B, Ctrl + Alt এবং Shift + A + Tab হল অবৈধ।

  • দুটি বা তার বেশি InputAction বা InputGroup অবজেক্ট একই অনন্য আইডি শেয়ার করতে পারে না।

InputContext চালু করা হচ্ছে

InputContext আপনার গেমে দ্বৈততা ছাড়াই বিভিন্ন অ্যাকশনের জন্য একই কী ব্যবহার করতে গেমকে অনুমতি দেয়। এইভাবে, গেমপ্লে চলাকালীন জাম্প করার জন্য এবং মেনু বেছে নেওয়া কনফার্ম করার জন্য কোনও গেম স্পেস ব্যবহার করলে, প্লেয়াররা মেনুতে স্পেস-কে Enter-এ এবং গেমপ্লে চলাকালীন স্পেস-কে উপরের দিকের তীরচিহ্ন-এ আলাদা আলাদাভাবে রিম্যাপ করতে পারবেন।

নিম্নলিখিত সিকোয়েন্স ডায়াগ্রাম থেকে বোঝা যায় যে setInputContext() API রানটাইমে কীভাবে কাজ করে:

কী রিম্যাপ করার সময় ইনপুট SDK-এর ফ্লো দেখানো ডায়াগ্রাম।

আপগ্রেড করুন

Input SDK-এর আগের ভার্সন ব্যবহার করা গেমগুলি এখনও সাধারণ রিম্যাপিং কাজ করে, যদি না সেগুলি কাজ করে না এমন কনফিগারেশন ব্যবহার করে। আপনার গেম যদি Input SDK-এর পুরনো ভার্সন ব্যবহার করে, তাহলে 0.0.4 থেকে 1.0.0-বিটা ভার্সনে আপগ্রেড করার গাইড পড়ে দেখুন।

1.1.1-beta ভার্সনে আপগ্রেড করলে নিম্নলিখিত ফিচার সহ নতুন ফিচার চালু হয়ে যায়:

  • ট্রিগার করার কন্টেক্সট পরিবর্তন করা।
  • কী ম্যাপিং ইভেন্টের বিজ্ঞপ্তি পাওয়া
  • অ্যাকশন, গ্রুপ, কন্টেক্সট বা ম্যাপ পিছু রিম্যাপিং বন্ধ করা।

ইনস্টল করা

Unity প্লাগ-ইন v1.1.1-beta এখন আপনি ব্যবহার করতে পারবেন। আপনার গেমে ইনস্টল করা Input SDK-এর যেকোনও আগের ভার্সন মুছে দিতে হবে এবং বর্তমান ভার্সনে আপগ্রেড করতে হবে।

আপনার গেমে Input SDK v1.1.1-beta যোগ করতে, SDK যোগ করা দেখুন।

স্ট্যাটিক ফিল্ডের সংজ্ঞা দাও

1.1.1-বিটা ভার্সনের জন্য, আপনার InputMappingProvider ক্লাসের InputActions, InputGroups, InputContexts এবং InputMap-কে স্ট্যাটিক ফিল্ড হিসেবে ডিফাইন করা ভালো, কারণ এইসব ফিল্ড আপনার অ্যাপ্লিকেশনের অন্যান্য অংশ থেকে অ্যাক্সেস করা যাবে:

#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

আপনার 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

var driveAction = PlayInputAction.Create(
    "Drive",
    (long)InputEventIds.DRIVE,
    PlayInputControls.Create(
        new[] { AndroidKeyCode.KEYCODE_SPACE },
        new List<PlayMouseAction>()
    )
);

Input SDK 1.1.1-beta-তে InputAction

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
);

Input SDK 1.1.1-বিটাতে InputAction (ভার্সন স্ট্রিং সহ)

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
);

আপনার কী বাইন্ডিংয়ের ভার্সনিং সম্পর্কে আরও তথ্য পেতে, কী আইডি ট্র্যাক করা দেখুন।

আপনার InputGroups আপডেট করা

Input SDK-তে 1.1.1-beta আপনাকে প্রতিটি InputGroup অনন্যভাবে শনাক্ত করতে হবে। প্রতিটি InputAction একটি InputGroup-এর অংশ -- এটি হল সম্পর্কিত অ্যাকশনের সংগ্রহ। এর ফলে গেমপ্লে চলাকালীন কন্ট্রোল নেভিগেট করা ও খুঁজে পাওয়া সহজ হয়। ঠিক যেমন একটি InputAction-এর মধ্যে থাকা সব অ্যাকশনের মধ্যে একটি অনন্য আইডেন্টিফায়ার থাকতে হবে, ঠিক তেমনই InputContext-এর মধ্যে থাকা সব অ্যাকশনের মধ্যে একটি 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-এর InputGroup.create() পদ্ধতি 1.0.0-beta বন্ধ করে দেওয়া হয়েছে। আপনাকে অবশ্যই নিজের InputGroup গেমের মধ্যে একটি ভার্সন শনাক্তকারী এবং বুলিয়ান দিয়ে আপডেট করতে হবে যা নির্দেশ করে যে আপনার গ্রুপের InputAction অবজেক্ট আবার ম্যাপ করা যাবে কিনা। বন্ধ হয়ে যাওয়া Input SDK 1.0.0-beta create() মেথড ব্যবহার করে তৈরি করা গ্রুপ আবার ম্যাপ করা যায়, সেটির আইডি হল ০, এবং ভার্সন আইডি হল একটি খালি স্ট্রিং (""):

Input SDK 1.0.0-beta-তে InputGroup

var gameInputGroup = PlayInputGroup.Create(
    "Road controls",
    new List<PlayInputAction>
    {
        driveAction,
        turboAction,
        openGarageAction,
        openPgsAction,
        openStoreAction
    }
);

Input SDK 1.1.1-beta-তে InputGroup

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
);

Input SDK 1.1.1-beta-তে InputGroup (ভার্সন স্ট্রিং সহ)

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
);

আপনার কী বাইন্ডিংয়ের ভার্সনিং সম্পর্কে আরও তথ্য পেতে, কী আইডি ট্র্যাক করা দেখুন।

আপনার InputMap আপডেট করা

Input SDK-এর InputMap.create() পদ্ধতি 1.0.0-beta বন্ধ করে দেওয়া হয়েছে। ভার্সন শনাক্তকারী অ্যাসাইন করতে, রিম্যাপিং ফিচার থেকে সম্পূর্ণ বেরিয়ে আসতে অথবা আপনার গেমের জন্য রিজার্ভ করা কী-এর একটি তালিকা অ্যাসাইন করতে আপনার InputMap আপডেট করুন যেগুলি আপনি চান না যে ব্যবহারকারী রিম্যাপিংয়ের জন্য ব্যবহার করুক। Input SDK 1.0.0-beta create() পদ্ধতি ব্যবহার করে সংজ্ঞায়িত প্রতিটি InputMap ডিফল্ট হিসেবে রিম্যাপ করা যায়, 0 আইডি দিয়ে শনাক্ত করা হয় এবং কোনও রিজার্ভ করা কী থাকে না।

Input SDK 1.0.0-beta-তে InputMap

var gameInputMap = PlayInputMap.Create(
    new List<PlayInputGroup>
    {
        gameInputGroup,
        menuInputGroup
    },
    PlayMouseSettings.Create(false, false)
);

Input SDK 1.1.1-beta-তে InputMap


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()
);

এর পরে কী করতে হবে

1.1.1-বিটাতে আপগ্রেড করা চালিয়ে যেতে, এগুলি করুন: বিভিন্ন দৃশ্যের জন্য আলাদা আলাদা কন্ট্রোল অ্যাসাইন করুন InputContexts ব্যবহার করুন অথবা আপনার গেমের UI আপডেট করুন। এটি করতে, এগুলি করুন: রিম্যাপিং ইভেন্ট সম্পর্কে বিজ্ঞপ্তি পান এবং এর জন্য InputRemappingListeners ব্যবহার করুন।

আপনার কী-বাইন্ডিং আপডেট করার সময়, কী-বাইন্ডিং ডিজাইন করার জন্য সঠিক পদ্ধতি দেখে নিন এবং রিম্যাপিং ফিচারের বিধিনিষেধ ও সীমাবদ্ধতা বিবেচনা করুন।