ইউনিটির জন্য ইনপুট SDK সংস্করণ 1.1 এ আপগ্রেড করুন

এই নির্দেশিকাটি ব্যাখ্যা করে কিভাবে আপনার গেমটিকে 1.0 থেকে 1.1 ইনপুট SDK ফর ইউনিটিতে আপগ্রেড করতে হয়। Java এবং Kotlin নির্দেশাবলীর জন্য এখানে ক্লিক করুন

অব্যাহতি পত্র

আপনার গেম ইনপুট SDK ব্যবহার করে যে কী বাইন্ডিংগুলি প্রদান করে তার উপর ভিত্তি করে পিসিতে Google Play গেমগুলি কীবোর্ড নিয়ন্ত্রণের রিম্যাপিং সমর্থন করে৷

ব্যবহারকারীরা ওভারলে খোলার মাধ্যমে, নিয়ন্ত্রণ নির্বাচন করে, এবং তারপরে তারা যে ক্রিয়াটি রিম্যাপ করতে চান তাতে ক্লিক করে এই বৈশিষ্ট্যটি অ্যাক্সেস করে৷

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

পিসিতে Google Play গেমগুলি গেমিং সেশন জুড়ে টিকে থাকার জন্য স্থানীয়ভাবে ব্যবহারকারীর রিম্যাপ করা নিয়ন্ত্রণগুলি সঞ্চয় করে৷ যেহেতু এই সেটিংসগুলি স্থানীয়ভাবে সংরক্ষণ করা হয়, সেগুলি মোবাইল অভিজ্ঞতাকে প্রভাবিত করে না এবং পিসিতে Google Play গেমগুলি আনইনস্টল করার পরে মুছে ফেলা হয়৷ একাধিক পিসি ডিভাইসে সেটিংস স্থির থাকে না।

আপনার গেমে কী রিম্যাপিং সক্ষম করতে আপনাকে ইনপুট SDK আপগ্রেড করার দরকার নেই, তবে একটি অসমর্থিত কনফিগারেশন সনাক্ত করা হলে আপনার গেমের জন্য রিম্যাপিং অক্ষম করা হবে৷

আপনি যদি ইনপুট রিম্যাপিং অভিজ্ঞতা নিয়ন্ত্রণ করতে চান বা আপনার গেমের জন্য রিম্যাপিং বৈশিষ্ট্য অক্ষম করা থাকে, তাহলে এই পদক্ষেপগুলি অনুসরণ করুন:

আপনি যদি আপনার কী বাইন্ডিংয়ের একমাত্র-পঠন সংস্করণ প্রদর্শন করার সময় আপনার গেমের জন্য রিম্যাপিং বৈশিষ্ট্যটি অপ্ট-আউট করতে চান তবে এই পদক্ষেপগুলি অনুসরণ করুন:

  • ইনপুট SDK 1.1.0-beta আপগ্রেড করুন৷
  • রিম্যাপিং বৈশিষ্ট্য নিষ্ক্রিয় সেট করতে আপনার InputMap আপডেট করুন৷

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

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

অসমর্থিত কনফিগারেশন

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

  • একটি InputAction যা বহুগুণ কী ব্যবহার করে তা অবশ্যই একটি সংশোধক এবং নন-সংশোধনকারী কী নিয়ে গঠিত হতে হবে। উদাহরণ স্বরূপ, Shift + A বৈধ কিন্তু A + B , Ctrl + Alt , এবং Shift + A + Tab অবৈধ।

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

ইনপুট কনটেক্সট প্রবর্তন করা হচ্ছে

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

নিচের সিকোয়েন্স ডায়াগ্রাম দেখায় কিভাবে setInputContext() API রানটাইমে কাজ করে:

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

আপগ্রেড করুন

ইনপুট SDK-এর পূর্ববর্তী বাস্তবায়ন ব্যবহার করে গেমগুলি এখনও মৌলিক রিম্যাপিং সমর্থন করে, যদি না তারা একটি অসমর্থিত কনফিগারেশন ব্যবহার করে। যদি আপনার গেমটি ইনপুট SDK-এর একটি পুরানো সংস্করণ ব্যবহার করে, তাহলে 0.0.4 থেকে 1.0.0-বিটা পর্যন্ত আপগ্রেড গাইডটি পড়ার কথা বিবেচনা করুন৷

1.1.0-বিটাতে আপগ্রেড করা নতুন বৈশিষ্ট্যগুলিকে সক্ষম করে, যার মধ্যে রয়েছে:

  • ট্রিগারিং প্রসঙ্গ পরিবর্তন.
  • মূল ম্যাপিং ইভেন্টের বিজ্ঞপ্তি প্রাপ্তি
  • অ্যাকশন, গোষ্ঠী, প্রসঙ্গ, বা মানচিত্র প্রতি রিম্যাপিং অক্ষম করা হচ্ছে।

স্থাপন

ইউনিটি প্লাগইন v1.1.0-বিটা আপনার ব্যবহারের জন্য উপলব্ধ। আপনার গেমে ইনস্টল করা ইনপুট SDK-এর পূর্ববর্তী সংস্করণগুলি মুছে ফেলতে হবে এবং বর্তমান সংস্করণে আপগ্রেড করতে হবে৷

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

স্ট্যাটিক ক্ষেত্র সংজ্ঞায়িত করুন

1.1.0-বিটা সংস্করণের জন্য আপনার 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

আপনার InputActions আপডেট করুন

ইনপুট SDK 1.0.0-beta এর InputAction.create() পদ্ধতিটি বাতিল করা হয়েছে৷ একটি InputAction একটি সংস্করণ শনাক্তকারী রয়েছে এবং এটি পুনরায় ব্যবহারযোগ্য বা না হিসাবে চিহ্নিত করা যেতে পারে। ইনপুট 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.0-বিটাতে ইনপুট অ্যাকশন

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.0-বিটাতে 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
);

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

আপনার ইনপুট গ্রুপ আপডেট করুন

ইনপুট SDK 1.1.0-beta আপনাকে প্রতিটি InputGroup স্বতন্ত্রভাবে সনাক্ত করতে হবে। প্রতিটি InputAction একটি InputGroup অন্তর্গত -- সম্পর্কিত ক্রিয়াগুলির একটি সংগ্রহ। এটি গেমপ্লে চলাকালীন নিয়ন্ত্রণগুলির নেভিগেশন এবং আবিষ্কারযোগ্যতা উন্নত করে। যেভাবে একটি InputAction একটি একক InputContext এর সমস্ত অ্যাকশনের মধ্যে একটি অনন্য শনাক্তকারী থাকা আবশ্যক, তেমনি একটি InputGroup বিদ্যমান গোষ্ঠীগুলির মধ্যে একটি অনন্য ID থাকতে হবে৷

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

ইনপুট SDK 1.0.0-বিটাতে ইনপুট গ্রুপ

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

ইনপুট SDK 1.1.0-বিটাতে ইনপুট গ্রুপ

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.0-বিটাতে ইনপুট গ্রুপ (সংস্করণ স্ট্রিং সহ)

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 ডিফল্টরূপে রিম্যাপযোগ্য, আইডি 0 দিয়ে চিহ্নিত করা হয় এবং কোনো সংরক্ষিত কী নেই।

ইনপুট SDK 1.0.0-বিটাতে ইনপুটম্যাপ

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

ইনপুট SDK 1.1.0-বিটাতে ইনপুটম্যাপ


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.0-বিটাতে আপগ্রেড চালিয়ে যান।

আপনার কী-বাইন্ডিংগুলি আপডেট করার সময় আপনার কী বাইন্ডিংগুলি ডিজাইন করার জন্য সর্বোত্তম অনুশীলনগুলি দেখুন এবং রিম্যাপিং বৈশিষ্ট্যের সীমাবদ্ধতা এবং সীমাবদ্ধতাগুলি বিবেচনা করুন৷