গেম বিল্ড, ইনস্টল ও রান প্রসেস ডিবাগ করা

ভূমিকা

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

এই ডকুমেন্ট ছাড়াও, আরও তথ্যের জন্য Firebase for Unity সংক্রান্ত প্রায়শই জিজ্ঞাসিত প্রশ্ন দেখুন।

প্লে মোড কম্পাইলেশন সংক্রান্ত সমস্যা

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

Unity শুরু হলে বা ডিপেন্ডেন্সি, কোড বা অন্যান্য অ্যাসেটে পরিবর্তন শনাক্ত করলে, এটি প্রোজেক্ট আবার তৈরি করার চেষ্টা করবে। সেই সময় প্রোজেক্ট কম্পাইল করা না গেলে, এডিটর কম্পাইলেশন সংক্রান্ত সমস্যা কনসোলে লগ করবে এবং আপনি প্লে মোডে প্রবেশ করার চেষ্টা করলে, Unity-এর দৃশ্য ট্যাবে একটি সমস্যার পপ-আপ দেখতে পাবেন যাতে All compiler errors have to be fixed before you can enter playmode! লেখা থাকবে।

টাইপ, ক্লাস, পদ্ধতি ও মেম্বার উল্লেখ করা নেই

এডিটর ও কম্পাইলার প্রয়োজনীয় ধরন, ক্লাস, পদ্ধতি ও মেম্বার খুঁজে না পাওয়ার কারণে Firebase-এ অনেক সমস্যা হয়। এর সাধারণ লক্ষণগুলি হল নিম্নলিখিতগুলির ভেরিয়েন্ট:

The type or namespace name ‘<CLASS OR NAMESPACE NAME>' could not be found. Are you missing a using directive or an assembly reference?

The type or namespace name <TYPE OR NAMESPACE NAME> does not exist in the namespace ‘Firebase<.OPTIONAL NESTED NAMESPACE NAME PATH>' (are you missing an assembly reference?)

‘<CLASS NAME>' does not contain a definition for ‘<MEMBER VARIABLE OR METHOD NAME>'

সমাধানের ধাপ:
  1. আপনি কোডে যেখানে Firebase ক্লাস বা মেথড ব্যবহার করছেন, সেখানে নিশ্চিত করুন যে আপনি নির্দিষ্ট Firebase প্রোডাক্টের জন্য সঠিক using নির্দেশিকা ব্যবহার করে সেগুলি উপলভ্য করছেন।

    1. MechaHamster: Level Up With Firebase Edition থেকে নেওয়া উদাহরণ:
      1. using Firebase.RemoteConfig;
      2. using Firebase.Crashlytics;
  2. আপনি উপযুক্ত Firebase প্যাকেজ ইমপোর্ট করেছেন কিনা তা যাচাই করুন:

    1. উপযুক্ত প্যাকেজ ইমপোর্ট করতে, হয়:
      1. Firebase Unity SDK-কে .unitypackage হিসেবে যোগ করুন অথবা
      2. Unity ইনস্টল করার অতিরিক্ত বিকল্প থেকে কোনও একটি বিকল্প বেছে নিয়ে সেটি ব্যবহার করুন।
    2. আপনার প্রোজেক্টের প্রতিটি Firebase প্রোডাক্ট এবং EDM4U:
      • একই ভার্সনে আছে
      • .unitypackage হিসেবে এক্সক্লুসিভলি অথবা এক্সক্লুসিভলি Unity প্যাকেজ ম্যানেজারের মাধ্যমে ইনস্টল করা হয়েছে।
  3. আপনি যদি "১০.০.০" ভার্সনের আগে .unitypackage হিসেবে Firebase ইউনিটি SDK ইমপোর্ট করে থাকেন, তাহলে Firebase ইউনিটি SDK-এর জিপ আর্কাইভে .NET 3.x এবং .NET 4.x, দুটির জন্যই প্যাকেজ থাকে। আপনার প্রোজেক্টে শুধুমাত্র মানানসই .NET ফ্রেমওয়ার্ক লেভেল অন্তর্ভুক্ত করেছেন কিনা তা নিশ্চিত করুন:

    1. Unity Editor-এর বিভিন্ন ভার্সন এবং .NET Frameworks লেভেলের মধ্যে সামঞ্জস্যের বিষয়ে আপনার Unity প্রোজেক্টে Firebase যোগ করুন লিঙ্কে আলোচনা করা হয়েছে।
    2. আপনি যদি ভুল .NET ফ্রেমওয়ার্ক লেভেলে আপনার Firebase প্যাকেজ ইম্পোর্ট করে থাকেন অথবা .unitypackage থেকে অতিরিক্ত Unity ইনস্টলেশন বিকল্প-এর মধ্যে কোনও একটিতে পাল্টাতে চান , তাহলে সবচেয়ে ভালো উপায় হল এই মাইগ্রেশন বিভাগে উল্লেখ করা পদ্ধতি অনুযায়ী প্রতিটি Firebase প্যাকেজ সরিয়ে দেওয়া এবং তারপর আবার সব Firebase প্যাকেজ ইম্পোর্ট করা।
  4. আপনার এডিটর প্রজেক্টটি আবার তৈরি করছে কিনা এবং আপনার প্লে করার চেষ্টা প্রজেক্টের সবচেয়ে সাম্প্রতিক অবস্থা প্রতিফলিত করছে কিনা তা চেক করুন:

    1. ডিফল্ট হিসেবে, অ্যাসেট বা কনফিগারেশনে পরিবর্তন শনাক্ত করা হলে, Unity এডিটর রিবিল্ড করার জন্য সেট করা থাকে।
    2. এই ফাংশনালিটি বন্ধ করে দেওয়া হয়েছে এবং Unity Editor ম্যানুয়ালি রিফ্রেশ/রিকম্পাইল করার জন্য সেট করা হয়েছে, এমনটা হতে পারে। এটি খতিয়ে দেখুন এবং এমন হলে ম্যানুয়ালি রিফ্রেশ করার চেষ্টা করুন।

প্লে মোড রানটাইম সমস্যা

আপনার গেম শুরু হলেও, রান করার সময় Firebase-এ সমস্যা হলে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

Mac OS-এ "নিরাপত্তা ও গোপনীয়তা" বিকল্পে Firebase বান্ডেল অনুমোদন করেছেন কিনা তা নিশ্চিত করুন

Mac OS-এ এডিটরে আপনার গেম শুরু করার সময়, আপনাকে যদি এমন একটি ডায়ালগ দেখানো হয় যাতে লেখা আছে, "FirebaseCppApp-<version>.bundle খোলা যাচ্ছে না কারণ ডেভেলপারকে যাচাই করা যাচ্ছে না।", তাহলে আপনাকে Mac-এর নিরাপত্তা ও গোপনীয়তা মেনুতে গিয়ে সেই নির্দিষ্ট বান্ডেল ফাইলটি অনুমোদন করতে হবে।

এটি করতে, Apple আইকন > সিস্টেম প্রেফারেন্স > নিরাপত্তা ও গোপনীয়তা বিকল্পে ক্লিক করুন

নিরাপত্তা মেনুতে, পৃষ্ঠার প্রায় মাঝামাঝি জায়গায়, একটি বিভাগ আছে যেখানে লেখা আছে ""FirebaseCppApp-<version>.bundle" ব্যবহার করা থেকে ব্লক করা হয়েছে কারণ এটি কোনও শনাক্ত করা ডেভেলপার থেকে আসেনি।"

যাই হোক অনুমতি দিন লেবেল করা বোতামে ক্লিক করুন।

c35166e224cce720.png

Unity-তে ফিরে যান এবং আবার চালান বিকল্পে প্রেস করুন।

আপনি তখন প্রথমটির মতো একটি সতর্কতা দেখতে পাবেন:

5ad9ddb0d3a52892.png

খুলুন বিকল্পে প্রেস করুন এবং আপনার প্রোগ্রামটি কাজ করতে পারবে; এই নির্দিষ্ট ফাইল সম্পর্কে আপনাকে আর জিজ্ঞাসা করা হবে না।

আপনার প্রোজেক্টে সঠিক কনফিগারেশন ফাইল আছে এবং তা ব্যবহার করা হচ্ছে কিনা তা নিশ্চিত করুন

  1. ফাইল > বিল্ড সেটিংস থেকে আপনার বিল্ড সেটিংস আপনার টার্গেট (iOS বা Android) অনুযায়ী সেট করা আছে কিনা তা ভালভাবে দেখে নিন। আরও বিস্তারিত আলোচনার জন্য, Unity বিল্ড সেটিংস ডকুমেন্টেশন পড়ুন।
  2. আপনার অ্যাপের জন্য কনফিগারেশন ফাইল (Android-এর জন্য google-services.json বা iOS-এর জন্য GoogleService-Info.plist) ডাউনলোড করুন এবং প্রোজেক্ট সেটিংস > আপনার অ্যাপ থেকে টার্গেট তৈরি করুন: আপনার কাছে আগে থেকেই এইসব ফাইল থাকলে, আপনার প্রোজেক্ট থেকে সেগুলি মুছে দিন এবং সবচেয়ে সাম্প্রতিক ভার্সন দিয়ে সেগুলি পরিবর্তন করুন, নিশ্চিত করুন যে উপরে দেখানো বানান অনুযায়ী সেগুলি লেখা হয়েছে এবং ফাইলের নামের সাথে "(১)" বা অন্য কোনও নম্বর যোগ করা নেই।
  3. কনসোলে Assets/StreamingAssets/-এ ফাইল সংক্রান্ত কোনও মেসেজ থাকলে, সেখানে Unity ফাইল এডিট করতে পারেনি বলে কোনও কনসোল মেসেজ নেই তা নিশ্চিত করুন
  4. Assets/StreamingAssets/google-services-desktop.json জেনারেট করা হয়েছে এবং ডাউনলোড করা কনফিগারেশন ফাইলের সাথে মিলছে কিনা তা নিশ্চিত করুন।
    • এটি অটোমেটিক তৈরি না হলে এবং StreamingAssets/ না থাকলে, Assets ডিরেক্টরিতে ম্যানুয়ালি ডিরেক্টরি তৈরি করুন।
    • Unity এখন google-services-desktop.json জেনারেট করেছে কিনা তা চেক করুন।

নিশ্চিত করুন যে প্রতিটি Firebase প্রোডাক্ট এবং EDM4U শুধুমাত্র .unitypackage বা Unity প্যাকেজ ম্যানেজারের মাধ্যমে ইনস্টল করা হয়েছে

  1. Firebase SDK এবং EDM4U যে কোনও একটি পদ্ধতিতে ইনস্টল করা হয়েছে কিনা তা নিশ্চিত করতে Assets/ ফোল্ডার এবং Unity Package Manager উভয়ই চেক করুন।
  2. Google Play-এর মতো কিছু Google-এর তৈরি প্লাগ-ইন এবং থার্ড-পার্টি প্লাগ-ইন EDM4U-এর উপর নির্ভর করতে পারে। এইসব প্লাগ-ইনের মধ্যে .unitypackage বা Unity Package Manager (UPM) প্যাকেজে EDM4U অন্তর্ভুক্ত থাকতে পারে। আপনার প্রোজেক্টে EDM4U-এর একটিই কপি আছে কিনা তা নিশ্চিত করুন। কোনও UPM প্যাকেজ EDM4U-এর উপর নির্ভর করলে, EDM4U-এর শুধু UPM ভার্সন রাখাই সবচেয়ে ভাল, যা Unity আর্কাইভ পৃষ্ঠার জন্য Google API-তে পাওয়া যাবে।

আপনার প্রোজেক্টের প্রতিটি Firebase প্রোডাক্ট একই ভার্সনে আছে কিনা তা নিশ্চিত করুন।

  1. Firebase SDK .unitypackage-এর মাধ্যমে ইনস্টল করা হলে, Assets/Firebase/Plugins/x86_64/-এর অধীনে থাকা সব FirebaseCppApp লাইব্রেরি একই ভার্সনের কিনা তা চেক করুন।
  2. Unity Package Manager (UPM)-এর মাধ্যমে Firebase SDK ইনস্টল করা হলে, Windows > Package Manager খুলুন, "Firebase" সার্চ করুন এবং সব Firebase প্যাকেজ একই ভার্সনে আছে কিনা তা নিশ্চিত করুন।
  3. আপনার প্রোজেক্টে Firebase SDK-এর বিভিন্ন ভার্সন থাকলে, আমরা সাজেস্ট করি যে আপনি সব Firebase SDK সম্পূর্ণভাবে সরিয়ে দিন এবং তারপরে আবার সব Firebase SDK ইনস্টল করুন, তবে এবার একই ভার্সন ইনস্টল করুন। সবচেয়ে পরিষ্কার উপায় হল, এই মাইগ্রেশন বিভাগে উল্লেখ করা পদ্ধতির মাধ্যমে প্রতিটি Firebase প্যাকেজ সরিয়ে দেওয়া।

রিজলভার ও টার্গেট ডিভাইস বিল্ড সংক্রান্ত সমস্যা

আপনার গেম যদি এডিটরে কাজ করে (আপনার বেছে নেওয়া উপযুক্ত বিল্ড টার্গেটের জন্য কনফিগার করা), তাহলে এর পরে যাচাই করুন যে External Dependency Manager for Unity (EDM4U) সঠিকভাবে কনফিগার করা হয়েছে এবং কাজ করছে।

EDM4U GitHub রিপোজিটরিতে এই প্রসেসের এই অংশের জন্য ধাপে-ধাপে গাইড আছে যা পরবর্তী ধাপে যাওয়ার আগে আপনার পর্যালোচনা ও অনুসরণ করা উচিত।

'সিঙ্গেল ডেক্স' সংক্রান্ত সমস্যা ও ছোট করা (Cloud Firestore ব্যবহার করলে বাধ্যতামূলক)

Android অ্যাপ তৈরি করার সময়, একটি dex ফাইল থাকার কারণে আপনি বিল্ড সংক্রান্ত সমস্যার সম্মুখীন হতে পারেন। ত্রুটি মেসেজটি নিম্নলিখিত মেসেজের মতো দেখতে হয় (আপনার প্রোজেক্ট যদি Gradle বিল্ড সিস্টেম ব্যবহার করার জন্য কনফিগার করা থাকে):

Cannot fit requested classes in a single dex file.

Android অ্যাপ্লিকেশনের জন্য ক্লাস ডেফিনিশনের সেট ও তার সাথে সম্পর্কিত অ্যাডজাঙ্কট ডেটা ধরে রাখতে .dex ফাইল ব্যবহার করা হয়। একটি ডেক্স ফাইল ৬৫,৫৩৬টি মেথডের রেফারেন্সের মধ্যে সীমাবদ্ধ; আপনার প্রোজেক্টের সব Android লাইব্রেরি থেকে মোট মেথডের সংখ্যা এই সীমা অতিক্রম করলে বিল্ড ব্যর্থ হবে।

নিম্নলিখিত দুটি ধাপ ক্রমানুসারে প্রয়োগ করা যেতে পারে; ছোট করার মাধ্যমে সমস্যার সমাধান না হলে তবেই মাল্টিডেক্স চালু করুন।

ছোট করার সুবিধা চালু করুন

Unity ২০১৭.২ ভার্সনে মিনিফিকেশন ফিচার নিয়ে এসেছে, যা অব্যবহৃত কোড সরিয়ে দেয়। এর ফলে, একটি dex ফাইলে রেফারেন্স করা মেথডের মোট সংখ্যা কমে যায়। * এই বিকল্পটি প্লেয়ার সেটিংস > Android > প্রকাশনা সেটিংস > ছোট করুন বিকল্পে পাওয়া যাবে। * Unity-এর বিভিন্ন ভার্সনে বিকল্পগুলি আলাদা হতে পারে, তাই অফিসিয়াল Unity ডকুমেন্টেশন দেখুন।

মাল্টিডেক্স চালু করা

ছোট করার সুবিধা চালু করার পরেও যদি রেফারেন্স করা পদ্ধতির সংখ্যা সীমা ছাড়িয়ে যায়, তাহলে আরেকটি বিকল্প হল multidex চালু করা। Unity-তে এটি করার একাধিক উপায় আছে:

  • প্লেয়ার সেটিংস-এর অধীনে কাস্টম গ্রেডেল টেমপ্লেট চালু থাকলে, mainTemplate.gradle পরিবর্তন করুন।
  • এক্সপোর্ট করা প্রোজেক্ট তৈরি করতে Android Studio ব্যবহার করলে, মডিউল-লেভেল build.gradle ফাইল পরিবর্তন করুন।

মাল্টিডেক্স ব্যবহারকারীর নির্দেশিকা থেকে আরও তথ্য পাওয়া যাবে।

টার্গেট ডিভাইসের রানটাইম সমস্যা বোঝা ও সমাধান করা

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

এই বিভাগে বিস্তারিতভাবে বলা হয়েছে যে সম্ভাব্য সমস্যার জন্য কীভাবে আপনার লগ ইনভেস্টিগেট করবেন এবং এমন একটি সমস্যা যা শুধুমাত্র ডিভাইস বা সিমুলেটরে রানটাইমে ঘটে।

Android

সিমুলেটার

  • আপনার এমুলেটরের কনসোলে দেখানো লগগুলি পরীক্ষা করুন বা Logcat উইন্ডো দেখুন।

ডিভাইস

adb ও adb logcat এবং সেগুলি কীভাবে ব্যবহার করতে হয় সেই সম্পর্কে জানুন।

  • আউটপুট ফিল্টার করার জন্য আপনি কমান্ড লাইন এনভায়রনমেন্টের বিভিন্ন টুল ব্যবহার করতে পারেন, তবে বিকল্প হিসেবে logcat-এর বিকল্প দেখতে পারেন।
  • ADB সেশন শুরু করার একটি সহজ উপায় হল:

    adb logcat -c && adb logcat <OPTIONS>

    যেখানে OPTIONS হল আউটপুট ফিল্টার করার জন্য কমান্ড লাইনে পাস করা যেকোনও ফ্ল্যাগ।

Android Studio-এর মাধ্যমে Logcat ব্যবহার করা

Android Studio-র মাধ্যমে Logcat ব্যবহার করার সময় অতিরিক্ত সার্চ টুল উপলভ্য থাকে যা প্রোডাক্টিভ সার্চ জেনারেট করার কাজকে আরও সহজ করে তোলে।

iOS

লগ পরীক্ষা করা হচ্ছে

ফিজিক্যাল ডিভাইস চালালে, সেটি আপনার কম্পিউটারের সাথে অ্যাটাচ করুন। Xcode-এ lldb পরীক্ষা করুন।

Swift সংক্রান্ত সমস্যা

আপনি যদি swift উল্লেখ করে এমন ত্রুটি লগ দেখতে পান, তাহলে সেই বিষয়ে Unity-র জন্য এক্সটার্নাল ডিপেন্ডেন্সি ম্যানেজার বিভাগটি দেখুন।

পরবর্তী ধাপ

আপনার গেমে এখনও Firebase সম্পর্কিত কম্পাইল, বিল্ড বা রান সংক্রান্ত সমস্যা থাকলে, Unity-র জন্য Firebase SDK-এর সমস্যা সংক্রান্ত পৃষ্ঠা দেখুন এবং নতুন সমস্যা ফাইল করার কথা বিবেচনা করুন। এছাড়াও, অতিরিক্ত বিকল্প সম্পর্কে জানতে Firebase সহায়তা পৃষ্ঠা দেখুন।