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

ভূমিকা

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

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

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

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

Unity যখন শুরু হয় বা ডিপেন্ডেন্সি, কোড বা অন্যান্য অ্যাসেটে পরিবর্তন শনাক্ত করে, তখন এটি প্রোজেক্ট আবার বিল্ড করার চেষ্টা করবে। সেই সময় প্রোজেক্ট কম্পাইল করা না গেলে, এডিটর কনসোলে কম্পাইলেশন সংক্রান্ত সমস্যার লগ তৈরি করবে এবং আপনি Play মোডে প্রবেশ করার চেষ্টা করলে, Unity-র Scene ট্যাবে 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 .unitypackages হিসেবে যোগ করুন অথবা
      2. Unity ইনস্টলেশনের অতিরিক্ত বিকল্প থেকে কোনও একটি বিকল্প দেখুন ও প্রয়োগ করুন।
    2. আপনার প্রোজেক্টের প্রতিটি Firebase প্রোডাক্ট এবং EDM4U:
      • একই ভার্সনে আছে
      • শুধুমাত্র .unitypackage হিসেবে অথবা শুধুমাত্র Unity Package Manager-এর মাধ্যমে ইনস্টল করা হয়েছে।
  3. আপনি যদি "10.0.0" ভার্সনের আগে Firebase Unity SDK .unitypackages হিসেবে ইমপোর্ট করে থাকেন, তাহলে Firebase Unity SDK zip আর্কাইভে .NET 3.x ও .NET 4.x, দু'টি ভার্সনের জন্যই প্যাকেজ থাকে। আপনার প্রজেক্টে শুধুমাত্র মানানসই .NET ফ্রেমওয়ার্ক লেভেল অন্তর্ভুক্ত করেছেন কিনা তা নিশ্চিত করুন:

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

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

Play Mode রানটাইম সমস্যা

আপনার গেম শুরু হলে, কিন্তু রান করার সময় Firebase-এর সাথে সমস্যা হলে, নিম্নলিখিত বিষয়গুলি চেষ্টা করে দেখুন:

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

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

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

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

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

c35166e224cce720.png

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

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

5ad9ddb0d3a52892.png

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

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

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

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

  1. Firebase SDK এবং EDM4U শুধুমাত্র একটি পদ্ধতি ব্যবহার করে ইনস্টল করা হয়েছে কিনা তা নিশ্চিত করতে Assets/ ফোল্ডার এবং Unity Package Manager উভয়ই চেক করুন।
  2. Google Play-এর মতো কিছু Google-এর তৈরি প্লাগ-ইন এবং থার্ড-পার্টি প্লাগ-ইন EDM4U-এর উপর নির্ভর করতে পারে। সেইসব প্লাগ-ইনে তাদের .unitypackages বা 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 প্যাকেজ সরিয়ে দেওয়া।

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

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

প্রসেসের এই অংশের জন্য EDM4U GitHub রিপোজিটরিতে ধাপে ধাপে নির্দেশিকা রয়েছে যা আপনাকে পর্যালোচনা করে অনুসরণ করতে হবে।

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

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

Cannot fit requested classes in a single dex file.

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

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

মিনিফিকেশন চালু করা

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

Multidex চালু করা

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

  • প্লেয়ার সেটিংস-এর মধ্যে কাস্টম Gradle টেমপ্লেট চালু করা থাকলে, 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 সহায়তা পৃষ্ঠা দেখুন।