ফায়ারবেস রিমোট কনফিগারেশনের মাধ্যমে আপনার ইউনিটি গেমকে ইন্সট্রুমেন্ট করুন

1। পরিচিতি

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

আপনি একটি নমুনা গেম, MechaHamster: Level Up with Firebase Edition- এ এই নতুন কার্যকারিতা যোগ করবেন। এই নমুনা গেমটি ক্লাসিক ফায়ারবেস গেম মেচাহ্যামস্টারের একটি নতুন সংস্করণ যা এর বেশিরভাগ অন্তর্নির্মিত ফায়ারবেস কার্যকারিতা সরিয়ে দেয়, আপনাকে তাদের জায়গায় Firebase-এর নতুন ব্যবহার বাস্তবায়নের সুযোগ দেয়।

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

আপনি কি শিখবেন

  • কিভাবে ক্লাউডে রিমোট কনফিগার মান সেট করবেন এবং সেগুলি পুনরুদ্ধার করবেন
  • পুনরুদ্ধার করা মানগুলি স্বয়ংক্রিয়ভাবে ব্যবহার করার জন্য কীভাবে আপনার ইউনিটি সি# কোডকে যন্ত্র তৈরি করবেন
  • কিভাবে JSON মান হিসাবে যৌগিক মান/বস্তু সংরক্ষণ, উপকরণ এবং ওভাররাইড করবেন
  • ব্যবহারকারীদের বিভিন্ন গোষ্ঠীর কাছে বিভিন্ন মান ভেরিয়েন্ট পরিবেশন করার জন্য কীভাবে দূরবর্তী কনফিগার অবস্থা ব্যবহার করবেন

আপনি কি প্রয়োজন হবে

  • Unity 2019.1.0f1 বা iOS এবং/অথবা Android বিল্ড সমর্থন সহ উচ্চতর
  • একটি ফিজিক্যাল অ্যান্ড্রয়েড/আইওএস ডিভাইস বা একটি সিমুলেটর/এমুলেটর যা গেমটি তৈরি এবং চালানোর জন্য

2. আপনার উন্নয়ন পরিবেশ সেট আপ করুন

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

কোডটি ডাউনলোড করুন

কমান্ড লাইন থেকে এই কোডল্যাবের গিটহাব সংগ্রহস্থল ক্লোন করুন:

git clone https://github.com/firebase/level-up-with-firebase

বিকল্পভাবে, যদি আপনার গিট ইনস্টল না থাকে, আপনি একটি ZIP ফাইল হিসাবে সংগ্রহস্থল ডাউনলোড করতে পারেন।

ইউনিটি এডিটরে ফায়ারবেসের সাথে লেভেল আপ খুলুন

  1. ইউনিটি হাব চালু করুন এবং প্রজেক্ট ট্যাব থেকে ওপেন- এর পাশের ড্রপ-ডাউন তীরটিতে ক্লিক করুন।
  2. ডিস্ক থেকে প্রকল্প যোগ করুন ক্লিক করুন।
  3. কোডটি রয়েছে এমন ডিরেক্টরিতে নেভিগেট করুন এবং তারপর ওকে ক্লিক করুন।
  4. যদি অনুরোধ করা হয়, ব্যবহার করার জন্য একটি ইউনিটি এডিটর সংস্করণ এবং আপনার লক্ষ্য প্ল্যাটফর্ম (Android বা iOS) নির্বাচন করুন৷
  5. প্রকল্পের নাম, লেভেল-আপ-উথ-ফায়ারবেস- এ ক্লিক করুন এবং প্রকল্পটি ইউনিটি এডিটরে খুলবে।
  6. আপনার সম্পাদক স্বয়ংক্রিয়ভাবে এটি না খুললে, ইউনিটি এডিটরের প্রকল্প ট্যাবে MainGameScene in Asset > Hamster খুলুন।

ইউনিটি ইনস্টল এবং ব্যবহার সম্পর্কে আরও তথ্যের জন্য, ইউনিটিতে কাজ করা দেখুন।

3. আপনার ইউনিটি প্রকল্পে Firebase যোগ করুন

একটি ফায়ারবেস প্রকল্প তৈরি করুন

  1. Firebase কনসোলে , প্রজেক্ট যোগ করুন ক্লিক করুন।
  2. একটি নতুন প্রকল্প তৈরি করতে, পছন্দসই প্রকল্পের নাম লিখুন।
    এটি প্রকল্পের নামের উপর ভিত্তি করে কিছুতে প্রকল্প আইডি (প্রকল্পের নামের নীচে প্রদর্শিত) সেট করবে। আপনি ঐচ্ছিকভাবে এটিকে আরও কাস্টমাইজ করতে প্রকল্প আইডিতে সম্পাদনা আইকনে ক্লিক করতে পারেন।
  3. অনুরোধ করা হলে, Firebase শর্তাবলী পর্যালোচনা করুন এবং স্বীকার করুন।
  4. অবিরত ক্লিক করুন.
  5. এই প্রকল্পের জন্য Google Analytics সক্ষম করুন বিকল্পটি নির্বাচন করুন এবং তারপরে অবিরত ক্লিক করুন।
  6. ব্যবহার করতে একটি বিদ্যমান Google Analytics অ্যাকাউন্ট নির্বাচন করুন বা একটি নতুন অ্যাকাউন্ট তৈরি করতে একটি নতুন অ্যাকাউন্ট তৈরি করুন নির্বাচন করুন।
  7. প্রকল্প তৈরি করুন ক্লিক করুন।
  8. প্রজেক্ট তৈরি হয়ে গেলে Continue এ ক্লিক করুন।

Firebase এর সাথে আপনার অ্যাপ নিবন্ধন করুন

  1. ফায়ারবেস কনসোলটি খুলুন এবং, প্রকল্পের ওভারভিউ পৃষ্ঠার কেন্দ্র থেকে, সেটআপ ওয়ার্কফ্লো চালু করতে ইউনিটি আইকনে ক্লিক করুন বা, যদি আপনি ইতিমধ্যে আপনার ফায়ারবেস প্রকল্পে একটি অ্যাপ যুক্ত করে থাকেন, তাহলে প্ল্যাটফর্ম বিকল্পগুলি প্রদর্শন করতে অ্যাপ যোগ করুন ক্লিক করুন।
  2. Apple (iOS) এবং Android বিল্ড লক্ষ্য উভয় নিবন্ধন করতে নির্বাচন করুন৷
  3. আপনার ইউনিটি প্রকল্পের প্ল্যাটফর্ম-নির্দিষ্ট আইডি(গুলি) লিখুন। এই কোডল্যাবের জন্য, নিম্নলিখিত লিখুন:
  4. ঐচ্ছিকভাবে, আপনার ইউনিটি প্রকল্পের প্ল্যাটফর্ম-নির্দিষ্ট ডাকনাম লিখুন।
  5. রেজিস্টার অ্যাপে ক্লিক করুন এবং ডাউনলোড কনফিগারেশন ফাইল বিভাগে এগিয়ে যান।
  6. যেটি বিল্ড টার্গেট আপনি প্রথমবার করেননি তার জন্য প্রক্রিয়াটি পুনরাবৃত্তি করুন।

ফায়ারবেস কনফিগারেশন ফাইল যোগ করুন

রেজিস্টার অ্যাপে ক্লিক করার পর, আপনাকে দুটি কনফিগারেশন ফাইল ডাউনলোড করতে বলা হবে (প্রতিটি বিল্ড টার্গেটের জন্য একটি কনফিগারেশন ফাইল)। আপনার ইউনিটি প্রজেক্টের Firebase-এর সাথে সংযোগ করার জন্য এই ফাইলগুলিতে Firebase মেটাডেটা প্রয়োজন।

  1. উভয় উপলব্ধ কনফিগার ফাইল ডাউনলোড করুন:
    • Apple (iOS)-এর জন্য : GoogleService-Info.plist ডাউনলোড করুন।
    • অ্যান্ড্রয়েডের জন্য : google-services.json ডাউনলোড করুন।
  2. আপনার ইউনিটি প্রকল্পের প্রজেক্ট উইন্ডো খুলুন, তারপর উভয় কনফিগার ফাইল সম্পদ ফোল্ডারে সরান।
  3. Firebase কনসোলে ফিরে, সেটআপ ওয়ার্কফ্লোতে, Next এ ক্লিক করুন এবং একতার জন্য Firebase SDK যোগ করতে এগিয়ে যান।

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

ইউনিটির জন্য Firebase SDK যোগ করুন

  1. Firebase কনসোলে Firebase Unity SDK ডাউনলোড করুন-এ ক্লিক করুন।
  2. সুবিধাজনক জায়গায় SDK আনজিপ করুন।
  3. আপনার খোলা ইউনিটি প্রকল্পে, সম্পদ > আমদানি প্যাকেজ > কাস্টম প্যাকেজে নেভিগেট করুন।
  4. আমদানি প্যাকেজ ডায়ালগে, আনজিপ করা SDK রয়েছে এমন ডিরেক্টরিতে নেভিগেট করুন, FirebaseAnalytics.unitypackage নির্বাচন করুন এবং তারপরে খুলুন ক্লিক করুন।
  5. ইম্পোর্ট ইউনিটি প্যাকেজ ডায়ালগ থেকে যা প্রদর্শিত হবে, আমদানিতে ক্লিক করুন।
  6. নিম্নলিখিত দুটি প্যাকেজ আমদানি করতে পূর্ববর্তী পদক্ষেপগুলি পুনরাবৃত্তি করুন:
    • FirebaseRemoteConfig.unitypackage
    • FirebaseCrashlytics.unitypackage
      Crashlytics হল একটি হালকা ওজনের, রিয়েলটাইম ক্র্যাশ রিপোর্টার যা আপনাকে ট্র্যাক করতে, অগ্রাধিকার দিতে এবং স্থিতিশীলতার সমস্যাগুলি সমাধান করতে সাহায্য করে যা আপনার অ্যাপের গুণমান নষ্ট করে। আপনি যদি আগে এটি ব্যবহার না করে থাকেন, তাহলে ইউনিটির জন্য ক্র্যাশলিটিক্স লার্নিং পাথওয়ে সম্পূর্ণ করার কথা বিবেচনা করুন।
  7. Firebase কনসোলে ফিরে যান এবং সেটআপ ওয়ার্কফ্লোতে, Next এ ক্লিক করুন।

ইউনিটি প্রোজেক্টে ফায়ারবেস SDK যোগ করার বিষয়ে আরও তথ্যের জন্য, অতিরিক্ত ইউনিটি ইনস্টলেশন বিকল্পগুলি দেখুন।

4. রিমোট কনফিগ ডিফল্ট সেট করুন এবং নতুন মান আনুন

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

Remote Config থেকে নতুন মান আনতে, Assets/Hamster/Scripts/MainGame.cs ফাইলে ইতিমধ্যেই বেশ কিছু অবাস্তব পদ্ধতি রয়েছে যা অবশ্যই সম্পূর্ণ করতে হবে।

  1. MainGame.cs এ নিম্নলিখিত বিবৃতিগুলি using যুক্ত করুন:
    using Firebase.Crashlytics;
    using Firebase.Extensions;
    using Firebase.RemoteConfig;
    
    Firebase.Extensions মডিউলটিতে C# Tasks API- এর কিছু এক্সটেনশন রয়েছে যা কলব্যাক সহ প্রাথমিক প্রক্রিয়া পরিচালনাকে সহজতর করতে সাহায্য করবে।
  2. আপনার MainGame.cs Start() পদ্ধতিতে Firebase প্রারম্ভিকতা যোগ করুন বিদ্যমান InitializeCommonDataAndStartGame() পদ্ধতিটি বর্তমানে অপ্রয়োগিত পদ্ধতির সাথে প্রতিস্থাপন করে, InitializeFirebaseAndStartGame() :
    void Start()
    {
       Screen.SetResolution(Screen.width / 2, Screen.height / 2, true);
       InitializeFirebaseAndStartGame();
    }
    
  3. MainGame.cs এ, InitializeFirebaseAndStartGame() খুঁজুন। একটি অ্যাপ ভেরিয়েবল ঘোষণা করুন এবং পদ্ধতির বাস্তবায়ন নিম্নরূপ ওভাররাইট করুন:
    public Firebase.FirebaseApp app = null;
    
    // Begins the firebase initialization process and afterwards, opens the main menu.
    private void InitializeFirebaseAndStartGame()
    {
       Firebase.FirebaseApp.CheckAndFixDependenciesAsync()
       .ContinueWithOnMainThread(
          previousTask =>
          {
             var dependencyStatus = previousTask.Result;
             if (dependencyStatus == Firebase.DependencyStatus.Available) {
             // Create and hold a reference to your FirebaseApp,
             app = Firebase.FirebaseApp.DefaultInstance;
             // Set the recommended Crashlytics uncaught exception behavior.
             Crashlytics.ReportUncaughtExceptionsAsFatal = true;
             SetRemoteConfigDefaults();
             } else {
             UnityEngine.Debug.LogError(
                $"Could not resolve all Firebase dependencies: {dependencyStatus}\n" +
                "Firebase Unity SDK is not safe to use here");
             }
          });
    }
    
  4. ফায়ারবেস ইনিশিয়ালাইজেশন অ্যাপ-মধ্যস্থ ডিফল্ট মান সেট করতে সফলতার উপর SetRemoteConfigDefaults কল করে। অবাস্তব SetRemoteConfigDefaults পদ্ধতিটি নিম্নলিখিতগুলির সাথে প্রতিস্থাপন করুন:
    private void SetRemoteConfigDefaults()
    {
       var defaults = new System.Collections.Generic.Dictionary < string, object > ();
       defaults.Add(
          Hamster.MapObjects.AccelerationTile.AccelerationTileForceKey,
          Hamster.MapObjects.AccelerationTile.AccelerationTileForceDefault);
       defaults.Add(
          Hamster.States.MainMenu.SubtitleOverrideKey,
          Hamster.States.MainMenu.SubtitleOverrideDefault);
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       remoteConfig.SetDefaultsAsync(defaults).ContinueWithOnMainThread(
          previousTask =>
          {
             FetchRemoteConfig(InitializeCommonDataAndStartGame);
          }
       );
    }
    

5. নতুন মান আনুন এবং সক্রিয় করুন (প্রয়োজন হিসাবে)

আমাদের এখন বিদ্যমান FetchRemoteConfig পদ্ধতিটি সম্পূর্ণ করতে হবে। এটি onFetchAndActivateSuccessful নামের একটি কলব্যাক প্যারামিটার ব্যবহার করে রিমোট কনফিগারেশনের পদ্ধতি FetchAsync (যা রিমোট কনফিগারেশন থেকে নতুন মান নিয়ে আসে) এবং ActivateAsync (যা কোডে উপলব্ধ করার জন্য সেই প্রাপ্ত মানগুলিকে সক্রিয় করে) কলগুলিকে চেইন করবে।

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

  1. FetchRemoteConfig :
    public void FetchRemoteConfig(System.Action onFetchAndActivateSuccessful)
    {
       if(app==null)
       {
          Debug.LogError($"Do not use Firebase until it is properly initialized by calling {nameof(InitializeFirebaseAndStartGame)}.");
          return;
       }
    
       Debug.Log("Fetching data...");
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       remoteConfig.FetchAsync(System.TimeSpan.Zero).ContinueWithOnMainThread(
          previousTask=>
          {
             if (!previousTask.IsCompleted)
             {
             Debug.LogError($"{nameof(remoteConfig.FetchAsync)} incomplete: Status '{previousTask.Status}'");
             return;
             }
             ActivateRetrievedRemoteConfigValues(onFetchAndActivateSuccessful);
          });
    }
    
    এ নিচের কোডটি পেস্ট করুন
  2. এরপরে, ActivateRetrievedRemoteConfigValues ​​পদ্ধতিটি সম্পূর্ণ করুন, যা একটি পাস-ইন কলব্যাক পায়, onFetchAndActivateSuccessful । সক্রিয়করণ শেষ হলে, নির্দিষ্ট কলব্যাক আহ্বান করা হবে:
    private void ActivateRetrievedRemoteConfigValues(System.Action onFetchAndActivateSuccessful)
    {
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       var info = remoteConfig.Info;
       if(info.LastFetchStatus == LastFetchStatus.Success)
       {
          remoteConfig.ActivateAsync().ContinueWithOnMainThread(
             previousTask =>
             {
             Debug.Log($"Remote data loaded and ready (last fetch time {info.FetchTime}).");
             onFetchAndActivateSuccessful();
             });
       }
    }
    

প্রারম্ভিক প্রসঙ্গ থেকে SetRemoteConfigDefaults দ্বারা ডাউনস্ট্রীম কল করা হলে, ActivateRetrievedRemoteConfigValues ​​পূর্ববর্তী সূচনা বিন্দু, InitializeCommonDataAndStartGame কল করে, মূল মেনু খুলে গেমটি শুরু করতে।

6. একটি দূরবর্তী কনফিগ লোডিং কৌশল সেট আপ করুন৷

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

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

Mechahamster এর মেনু সিস্টেমের দিকে তাকালে, UI ব্লকিং মেনু রিফ্রেশ যোগ করার সবচেয়ে সহজ উপায় হল মূল মেনু পুনরায় শুরু হওয়ার আগে এটিকে কল করা (বিশেষত যখন এটি অন্য মেনু থেকে ব্যাক আউট করে অ্যাক্সেস করা হয়) এবং UI প্রদর্শন পদ্ধতিটিকে onFetchAndActivateSuccessful কলব্যাক হিসাবে পাস করা। লেভেল সিলেক্ট মেনুতেও একই কাজ করা যেতে পারে।

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

অ্যাপে এটি সক্ষম করতে, প্রধান মেনুতে প্রাসঙ্গিক পদ্ধতিগুলি সম্পূর্ণ করুন এবং ফাইলগুলিকে স্তর নির্বাচন করুন, যা FetchAsync এবং ActivateAsync সম্পূর্ণ না হওয়া পর্যন্ত UI প্রদর্শন ব্লক করবে:

  1. Assets/Hamster/Scripts/States/MainMenu.cs খুলুন এবং বিদ্যমান Resume পদ্ধতিটি নিম্নলিখিতগুলির সাথে প্রতিস্থাপন করুন:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.SelectAndPlayMusic(CommonData.prefabs.menuMusic, true);
       CommonData.mainGame.FetchRemoteConfig(InitializeUI);
    }
    
  2. ফাইলটি সংরক্ষণ করুন।
  3. Assets/Hamster/Scripts/States/BaseLevelSelect.cs খুলুন, বিদ্যমান Resume পদ্ধতিটি নিম্নলিখিতগুলির সাথে প্রতিস্থাপন করুন:
    public override void Resume(StateExitValue results) {
       CommonData.mainGame.FetchRemoteConfig(ShowUI);
    }
    
  4. ফাইলটি সংরক্ষণ করুন।

7. আনার আচরণ ডিবাগ/ভ্যালিডেট করুন

এই মুহুর্তে, একটি ডায়াগনস্টিক/বৈধতা পরীক্ষা করা উপকারী। নিম্নলিখিত পদ্ধতি আপনাকে আপনার অ্যাপটি ম্যানুয়ালি পরীক্ষা করার অনুমতি দেবে এবং কিভাবে/যদি এটি দূরবর্তী কনফিগার মানগুলি আনয়ন করে এবং সক্রিয় করে।

তথ্য আপনার সিমুলেটর, ডিভাইস বা সম্পাদক লগের অংশ হিসাবে মুদ্রিত হবে। iOS এর জন্য, আপনি Xcode-এ ডিভাইস এবং সিমুলেটর লগ দেখতে পারেন। Android এর জন্য, adb logcat চালিয়ে লগ দেখুন। আপনি যদি সম্পাদকে প্লে টিপে ইউনিটিতে কোডটি চালান, লগগুলি কনসোল ট্যাবে উপস্থিত হয়৷

  1. অ্যাপটি পুনরায় তৈরি করুন এবং চালান (এডিটরে, একটি ডিভাইস বা সিমুলেটর ব্যবহার করে)।
  2. গেমের প্রধান মেনু প্রদর্শিত হওয়ার পরে, আপনার গেমের লগ আউটপুট পর্যালোচনা করুন, যাতে Debug.Log দ্বারা উত্পন্ন লগ থাকা উচিত। FetchRemoteConfig এবং ActivateRetrievedRemoteConfigValues ​​লগ ইন করুন। এগুলিকে "ডেটা আনা হচ্ছে..." এবং "দূরবর্তী ডেটা লোড এবং প্রস্তুত" বার্তাগুলি দেখানো উচিত৷ এই বার্তাগুলির শুরুতে টাইমস্ট্যাম্পগুলি নোট করুন৷
  3. গেমটিতে, লাইসেন্স টিপুন।
  4. ঠিক আছে টিপুন।
  5. গেমের প্রধান মেনু প্রদর্শিত হওয়ার জন্য অপেক্ষা করুন।
  6. আপনার গেমের লগ আউটপুট পর্যালোচনা করুন, যা আগের ধাপের মতো হওয়া উচিত, নতুন টাইমস্ট্যাম্প সহ (আপনি যেখানে গেমটি চালাচ্ছেন সেই সিস্টেম ঘড়িতে সেট করা সময়ের সাথে মিলে যায়)।
  7. গেমটিতে, প্লে টিপুন।
  8. লেটস রোল টিপুন।
  9. কীবোর্ড তীরগুলি ব্যবহার করে বলটিকে লক্ষ্যে নেভিগেট করুন, যা একটি স্তর সম্পূর্ণ মেনু খুলবে।
  10. লেভেল টিপুন।
  11. লেভেল সিলেক্ট মেনু লোড হওয়ার জন্য অপেক্ষা করুন।
  12. আপনার গেমের লগ আউটপুট আবার পর্যালোচনা করুন। এটি নতুন টাইমস্ট্যাম্পের সাথে আগের ধাপগুলির লগ বার্তাগুলির সাথে মিলিত হওয়া উচিত (আপনি যেখানে গেমটি চালাচ্ছেন সেই সিস্টেম ঘড়িতে সেট করা সময়ের সাথে মিলে যায়)৷

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

যদি মেনু লোড করার প্রাথমিক লগগুলি উপস্থিত হয়, কিন্তু পরবর্তীগুলির মধ্যে একটি না আসে, Assets/Hamster/Scripts/States/MainMenu.cs এবং Assets/Hamster/Scripts/States/BaseLevelSelect.csResume পদ্ধতিগুলি তদন্ত/পুনরায় প্রয়োগ করুন।

8. আপনার কোড যন্ত্র

এখন যেহেতু আপনি SetDefaultsAsync() এ অ্যাপ-মধ্যস্থ প্যারামিটার মানগুলি কনফিগার করেছেন এবং FetchAsync() এবং ActivateAsync() এর সাথে সবচেয়ে আপ-টু-ডেট সংস্করণগুলি উপলব্ধ করেছেন, আপনি কোডে সেই মানগুলি উল্লেখ করবেন এবং ব্যবহার করবেন৷

আপনি রিমোট কনফিগার ব্যাকএন্ডে মান সেট করার পরে, সেগুলি আনুন এবং সেগুলি সক্রিয় করুন ( বা একবারে উভয় করুন ), সেই মানগুলি আপনার অ্যাপে উপলব্ধ। এই মানগুলি ব্যবহার করতে, GetValue(string key ) কল করুন এবং একটি যুক্তি হিসাবে একটি প্যারামিটার কী বেছে নিন। এটি একটি ConfigValue প্রদান করে, যা বিভিন্ন সমর্থিত প্রকার হিসাবে মান অ্যাক্সেস করার বৈশিষ্ট্য রয়েছে: string , bool , long , double । এই প্রজেক্টে এবং বেশিরভাগ গেমিং ব্যবহারের ক্ষেত্রে, আপনাকে অবশ্যই শেষ দুটি প্রকারকে আরও বেশি ইডিওম্যাটিক int এবং float এ কাস্ট করতে হবে। এই রূপান্তরগুলি যাতে সমস্যার কারণ না হয় তা নিশ্চিত করার জন্য, নিশ্চিত করুন যে রিমোট কনফিগে সেট করা প্রাথমিক মানগুলি আপনি আপনার অ্যাপ কোডে যে প্রকারগুলি ব্যবহার করবেন তার বৈধ সীমার মধ্যে রয়েছে৷

  1. using Firebase.RemoteConfig; নিম্নলিখিত ফাইলগুলির শীর্ষে:
    • Assets/Hamster/Scripts/States/MainMenu.cs
    • Assets/Hamster/Scripts/MapObjects/AccelerationTile.cs
  2. AccelerationTile.cs এর Start পদ্ধতিটি প্রতিস্থাপন করুন :
    private void Start() {
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       Acceleration = (float)remoteConfig.GetValue(AccelerationTileForceKey).DoubleValue;
    }
    
    এই পরিবর্তনের সাথে, ত্বরণ টাইল দ্বারা প্রদত্ত শক্তির পরিমাণ রিমোট কনফিগ থেকে প্রাপ্ত একটিতে পরিবর্তিত হবে।
  3. MainMenu.cs এর InitializeUI পদ্ধতির মূল অংশটি সম্পাদনা করুন :
    private void InitializeUI() {
       if (menuComponent == null) {
          menuComponent = SpawnUI<Menus.MainMenuGUI>(StringConstants.PrefabMainMenu);
       }
    
       var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
       var subtitleOverride = JsonUtility.FromJson<Menus.MainMenuGUI.SubtitleOverride>(
          remoteConfig.GetValue(SubtitleOverrideKey).StringValue);
       // Only sets values if all fields of the override are non-default.
       if(subtitleOverride != null && subtitleOverride.IsValidOverride())
       {
          menuComponent.MenuSubtitleText.text = subtitleOverride.text;
          menuComponent.MenuSubtitleText.fontSize = subtitleOverride.fontSize;
          menuComponent.MenuSubtitleText.color = subtitleOverride.textColor;
       }
       ShowUI();
    }
    
    এখানে, subtitleOverride মূল মেনু স্ক্রিনে সাবটাইটেল পরিবর্তন করতে সেট করা হয়েছে যদি ক্লাউডে এর সমস্ত ক্ষেত্র তাদের প্রকারের ডিফল্ট মান ব্যতীত অন্য মান হিসাবে সেট করা থাকে।

9. দূরবর্তীভাবে প্যারামিটার মান সেট করুন

এখন যেহেতু আপনার অ্যাপটি সম্পূর্ণ-ইন্সট্রুমেন্টেড, আপনি রিমোট কনফিগার সার্ভারে প্যারামিটার এবং মান কনফিগার করতে প্রস্তুত। এই কোডল্যাবে, আমরা Firebase কনসোল ব্যবহার করে এটি সেট আপ করব।

  1. Firebase কনসোলে , আপনার প্রকল্প খুলুন।
  2. রিমোট কনফিগার ড্যাশবোর্ড দেখতে মেনু থেকে রিমোট কনফিগ নির্বাচন করুন।
  3. প্রতিটি প্যারামিটারের জন্য যা আপনি আপনার অ্যাপে সংজ্ঞায়িত করেছেন এবং নিম্নলিখিত টেবিলে তালিকাভুক্ত করেছেন, প্যারামিটার যোগ করুন ক্লিক করুন, প্যারামিটারের নাম (কী) এ পেস্ট করুন, টেবিলে তালিকাভুক্ত ডেটা টাইপ নির্বাচন করুন, অ্যাপ-মধ্যস্থ ডিফল্ট ব্যবহার অক্ষম করুন এবং পেস্ট করুন নতুন ডিফল্ট মান:

    প্যারামিটারের নাম (কী)

    ডেটা টাইপ

    ডিফল্ট মান

    ত্বরণ_টাইল_ফোর্স

    সংখ্যা

    100

    সাবটাইটেল_ওভাররাইড

    JSON

    {"text":"We overwrote the subtitle","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}

    Remote Config Parameter editor with\nacceleration_tile_force populated
  4. আপনার পরিবর্তনগুলি সংরক্ষণ করতে সংরক্ষণ করুন ক্লিক করুন৷
  5. নতুন কনফিগারেশন প্রকাশ করতে এবং আপনার গেমের জন্য নতুন মান উপলব্ধ করতে পাবলিশ এ ক্লিক করুন।
  6. এই দূরবর্তী পরামিতিগুলি সেট করার পরে আপনার অ্যাপটি আবার চালান এবং লক্ষ্য করুন কিভাবে তারা মূল ডিফল্টগুলিকে ওভাররাইড করে। Mechahamster main screen with Debug\nMenu enabled

10. বৈকল্পিক পরিবেশন করতে দূরবর্তী কনফিগার অবস্থা ব্যবহার করুন

ব্যবহারকারীরা যে ভাষায় কথা বলে, তারা কোথায় থাকে, দিনের সময় বা তারা কোন প্ল্যাটফর্ম ব্যবহার করে তার উপর ভিত্তি করে আপনি অ্যাপের অভিজ্ঞতা পূরণ করতে চাইতে পারেন। দূরবর্তী কনফিগার অবস্থা আপনাকে ব্যবহারকারীর কাছে বিভিন্ন মান (যাকে বৈকল্পিক বলা হয়) পরিবেশন করার জন্য পৃথকভাবে বা সংমিশ্রণে এই এবং অন্যান্য বৈশিষ্ট্যগুলি ব্যবহার করার ক্ষমতা দেয়।

শর্তগুলির জন্য একটি সাধারণ ব্যবহার হল iOS এবং Android প্ল্যাটফর্মগুলির মধ্যে সামগ্রী পরিবর্তন করা৷ কোন প্ল্যাটফর্ম ব্যবহার করা হচ্ছে তার উপর নির্ভর করে subtitle_override জন্য আলাদা মান পরিবেশন করে এমন একটি শর্ত বাস্তবায়ন করতে নিচের ধাপগুলি অনুসরণ করুন।

  1. Firebase কনসোলে আপনার প্রোজেক্টের রিমোট কনফিগার ট্যাব খুলুন।
  2. subtitle_override.
  3. নীচে বাম কোণে, নতুন যোগ করুন ক্লিক করুন।
  4. প্রদর্শিত ড্রপ-ডাউনে, শর্তসাপেক্ষ মানের উপর হোভার করুন এবং নতুন শর্ত তৈরি করুন ক্লিক করুন। Remote Config parameter editor:\nConditional value option
  5. প্রম্পট করা হলে, আপনি যদি আইওএস টার্গেট করে থাকেন তবে শর্তটি "আইওএস" বা "এন্ড্রয়েড" যদি আপনি অ্যান্ড্রয়েডকে টার্গেট করেন তবে নাম দিন। আপনি যদি উভয়কেই লক্ষ্য করে থাকেন তবে এখানে একটি বেছে নিন এবং বাকি কোডল্যাবের জন্য এটি ব্যবহার করুন। Using the Define a new condition\ndialog to define an iOS-specific condition
  6. প্রযোজ্য হলে... এর অধীনে, নির্বাচন করুন... ড্রপ-ডাউনে ক্লিক করুন এবং প্ল্যাটফর্ম নির্বাচন করুন। তারপর, উপযুক্ত প্ল্যাটফর্ম নির্বাচন করুন. Using the Define a new condition\neditor to select the iOS platform
  7. শর্ত তৈরি করতে শর্ত তৈরি করুন ক্লিক করুন। পরামিতি সম্পাদনা ডায়ালগ পুনরায় প্রদর্শিত হয় এবং আপনি এখন একটি মান সেট করতে পারেন:
    • আপনি যদি অ্যান্ড্রয়েডকে লক্ষ্য করে থাকেন, তাহলে মান সেট করুন:
      {"text":"Level Up Android Version","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
      
    • আপনি যদি iOS টার্গেট করেন, তাহলে মান সেট করুন:
      {"text":"Level Up iOS Version","fontSize":8,"textColor":{"r":0.0,"g":255.0,"b":0.0,"a":255.0}}
      
  8. আপনার পরিবর্তনগুলি সংরক্ষণ করতে সংরক্ষণ করুন ক্লিক করুন৷
  9. নতুন কনফিগারেশন প্রকাশ করতে এবং আপনার গেমের জন্য নতুন মান উপলব্ধ করতে পাবলিশ এ ক্লিক করুন।

আপনি যদি গেমটি আবার তৈরি করেন এবং চালান, তাহলে আপনি গেমটির সাবটাইটেলটি এর প্ল্যাটফর্ম-নির্দিষ্ট বৈকল্পিক দিয়ে প্রতিস্থাপিত দেখতে পাবেন।

11. রিয়েল-টাইম আপডেট পেতে রিমোট কনফিগার কনফিগার করুন

রিমোট কনফিগ এখন রিয়েল-টাইমে রিমোট কনফিগার টেমপ্লেটের আপডেট শুনতে এবং পরিচালনা করতে পারে। কনফিগার পরিবর্তন এবং আপডেট করা মান শুনতে অ্যাপগুলি নতুন রিয়েল-টাইম রিমোট কনফিগ এপিআই-তে সদস্যতা নিতে পারে।

কিভাবে এটা কাজ করে

আপডেট শুনতে, আপনার অ্যাপটিকে একটি পদ্ধতি প্রয়োগ করতে হবে যা OnConfigUpdateListener ইভেন্টে সদস্যতা নেয়। এক বা একাধিক কনফিগার আপডেট শ্রোতারা সদস্যতা নেওয়ার সময়, নতুন রিমোট কনফিগ টেমপ্লেটগুলি স্বয়ংক্রিয়ভাবে আনা হবে, সাবস্ক্রাইব করা হ্যান্ডলারদের ডাকা হয় এবং প্রতিক্রিয়া হিসাবে যুক্তি সম্পাদন করতে ব্যবহার করা যেতে পারে, যেমন নতুন মানগুলি সক্রিয় করা এবং অ্যাপ্লিকেশনের বাকি অংশগুলিতে সেগুলি উপলব্ধ করা৷

রিয়েল-টাইম রিমোট কনফিগ প্রয়োগ করুন

গেমটিতে এটি কীভাবে কাজ করে তা ব্যাখ্যা করতে, আপনার কোডে নিম্নলিখিত পরিবর্তনগুলি করুন।

একটি কনফিগ আপডেট হ্যান্ডলার তৈরি করুন

কনফিগ আপডেট ইভেন্ট ব্যবহার করার প্রথম ধাপ হল এটি শোনার জন্য একটি পদ্ধতি তৈরি করা। Assets/Hamster/Scripts/MainGame.cs এ নিম্নলিখিত পদ্ধতিটি রাখুন:

   void ActivateValuesOnConfigUpdate( object sender, ConfigUpdateEventArgs args)
   {
      if (args.Error != RemoteConfigError.None) {
         Debug.Log($"Error occurred while listening: {args.Error}");
         return;
      }

      Debug.Log("Updated keys: " + string.Join(", ", args.UpdatedKeys));
      // Activate all fetched values and then logs.
      var remoteConfig = FirebaseRemoteConfig.DefaultInstance;
      remoteConfig.ActivateAsync().ContinueWithOnMainThread(
         task => {
            Debug.Log($"Keys from {nameof(ActivateValuesOnConfigUpdate)} activated.");
         });
   }

এই পদ্ধতিটি আপডেট করা কীগুলির একটি তালিকা এবং লগে একটি সফল বার্তা প্রিন্ট করবে যখন এটি নতুন মানগুলি সক্রিয় করবে।

আপডেট ইভেন্টে সদস্যতা নিন

যখন ইভেন্টটি কল করা হয় তখন ActivateValuesOnConfigUpdate সক্রিয় করতে, ইভেন্টে সদস্যতা নিন। Assets/Hamster/Scripts/MainGame.csInitializeCommonDataAndStartGame() পদ্ধতিটি নিম্নলিখিতগুলির সাথে প্রতিস্থাপন করুন:

   void InitializeCommonDataAndStartGame()
   {
      CommonData.prefabs = FindObjectOfType<PrefabList>();
      CommonData.mainCamera = FindObjectOfType<CameraController>();
      CommonData.mainGame = this;

      Screen.orientation = ScreenOrientation.LandscapeLeft;

      musicPlayer = CommonData.mainCamera.GetComponentInChildren<AudioSource>();

      CommonData.gameWorld = FindObjectOfType<GameWorld>();

      // Set up volume settings.
      MusicVolume = PlayerPrefs.GetInt(StringConstants.MusicVolume, MaxVolumeValue);
      // Set the music to ignore the listeners volume, which is used for sound effects.
      CommonData.mainCamera.GetComponentInChildren<AudioSource>().ignoreListenerVolume = true;
      SoundFxVolume = PlayerPrefs.GetInt(StringConstants.SoundFxVolume, MaxVolumeValue);

      // Subscribes to on config update after first initial fetch and activate
      FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener += ActivateValuesOnConfigUpdate;

      stateManager.PushState(new States.MainMenu());
   }

নতুন লাইন ( += ActivateValuesOnConfigUpdate; দিয়ে শেষ হয়) ইভেন্ট হ্যান্ডলারকে ইভেন্টে সাবস্ক্রাইব করে।

হ্যান্ডলারের মালিকানাধীন বস্তু ধ্বংস হয়ে গেলে সদস্যতা ত্যাগ করুন

নাল রেফারেন্স ত্রুটি প্রতিরোধ করার জন্য, ইভেন্টগুলিতে সদস্যতা নেওয়া পদ্ধতি সহ বস্তুগুলি ধ্বংস হয়ে গেলে সেই পদ্ধতিটিকে সদস্যতা ত্যাগ করতে হবে। Assets/Hamster/Scripts/MainGame.cs এ নিম্নলিখিত পদ্ধতি যোগ করুন:

   private void OnDestroy() 
   {
      FirebaseRemoteConfig.DefaultInstance.OnConfigUpdateListener -= ActivateValuesOnConfigUpdate;
   }

নতুন কার্যকারিতা পরীক্ষা করুন

নতুন কার্যকারিতা যাচাই করতে, আপনার নির্মিত অ্যাপ ব্যবহার করে দেখুন। নিম্নলিখিত পদ্ধতির প্রয়োজন যে আপনি একটি বাস্তব ডিভাইস ব্যবহার করে লগ পড়তে এবং ডিবাগ করতে পারেন৷

acceleration_tile_force পরিবর্তন করুন এবং পর্যবেক্ষণ করুন

আপনার অ্যাপ শুরু করার পর, Firebase কনসোলের রিমোট কনফিগারেশন বিভাগে :

  1. acceleration_tile_force এর পাশে সম্পাদনা বোতাম টিপুন।

dc602d4db54e50a4.png

  1. মানটি '120' এ পরিবর্তন করুন এবং সংরক্ষণ করুন টিপুন।

fcbc1df848f88009.png

  1. পরিবর্তন প্রকাশ করুন বোতামে ক্লিক করুন।

3785c1e00e7a6359.png

  1. লগ পরিদর্শন করুন.
  2. আপনি যদি একটি লগ বার্তা দেখতে পান যা "শোনার সময় ত্রুটি ঘটেছে" দিয়ে শুরু হয়, এর বাকি অংশটি পড়ুন এবং এটি প্রিন্ট করা ত্রুটি বার্তাটি দিয়ে ডিবাগ করার চেষ্টা করুন।
  3. আপনি যদি একটি লগ দেখতে পান যা "আপডেট করা কী" দিয়ে শুরু হয়, আপনার অ্যাপ পরিবর্তিত মানগুলি পেয়েছে৷
  4. আপনি যদি এগুলোর কোনোটিই দেখতে পান, তাহলে আপনার বাকি লগগুলি দেখুন এবং তারপরে একটি কনফিগার আপডেট হ্যান্ডলার তৈরি করুন থেকে নির্দেশাবলী পুনরায় পর্যালোচনা করুন, পুনরায় পরীক্ষা করুন এবং কিছু ভুল আছে কিনা তা নির্ধারণ করতে লগগুলি পুনরায় পরীক্ষা করুন।

12. অভিনন্দন!

আপনি রিমোট কনফিগ ব্যবহার করেছেন গেমের মানগুলিকে আপনার অ্যাপে আনয়ন করে এবং বিভিন্ন ভেরিয়েন্ট পরিবেশন করার শর্তগুলি ব্যবহার করে দূরবর্তীভাবে নিয়ন্ত্রণ করতে!

আমরা কভার করেছি কি

  • কিভাবে রিমোট কনফিগার মান সেট এবং পুনরুদ্ধার করতে হয়
  • পুনরুদ্ধার করা মানগুলি ব্যবহার করার জন্য আপনার ইউনিটি সি# কোডটি কীভাবে উপকরণ করবেন
  • কিভাবে JSON মান হিসাবে যৌগিক মান/বস্তু সংরক্ষণ, উপকরণ এবং ওভাররাইড করবেন
  • বিভিন্ন মান ভেরিয়েন্ট পরিবেশন করার জন্য কিভাবে দূরবর্তী কনফিগার অবস্থা ব্যবহার করবেন

পরবর্তী পদক্ষেপ

একটি অ্যাপ ইন্সট্যান্স যখন একাধিক মান সহ একটি প্যারামিটার ব্যবহার করে (পরিস্থিতি বা স্থানীয়তার কারণে) তখন কোন মানগুলি প্রাপ্ত হয় তা আরও ভালভাবে বোঝার জন্য প্যারামিটার মান অগ্রাধিকার সম্পর্কে পড়ুন৷