مقدمه
در زیر راهنمای اشکال زدایی فرآیند کامپایل و ساخت بازی های Unity با استفاده از Firebase SDK for Unity است. نحوه بررسی و حل بسیاری از مشکلات رایجتری را که میتوانید هنگام پیکربندی و ساخت بازی خود برای یک پلتفرم جدید یا پس از بهروزرسانی با آنها مواجه شوید، توضیح میدهد. این به ترتیب زمانی که این خطاها ممکن است در فرآیند رخ دهد مرتب می شود. با آنها به ترتیب مشورت کنید و همانطور که هر کدام حل شد ادامه دهید.
علاوه بر این سند، برای اطلاعات بیشتر به پرسشهای متداول Firebase for Unity مراجعه کنید.
مشکلات تدوین حالت Play
اولین کلاس از مشکلات ساخت می تواند هنگام آزمایش در ویرایشگر قبل از شروع ساخت موبایل رخ دهد. این بخش مربوط به تمام خطاهای Firebase است که قبل و در حین Play Mode رخ می دهد.
زمانی که یونیتی تغییرات مربوط به وابستگی ها، کدها یا سایر دارایی ها را شروع می کند یا تشخیص می دهد، سعی می کند پروژه را بازسازی کند. اگر پروژه در آن زمان نتواند کامپایل شود، ویرایشگر خطاهای کامپایل را در کنسول ثبت میکند و اگر بخواهید وارد حالت Play شوید، یک پنجره پنجره خطایی در برگه Unity's Scene دریافت خواهید کرد که میخواند All compiler errors have to be fixed before you can enter playmode!
.
اشکال زدایی مشکلات کامپایل مربوط به Firebase
انواع، کلاسها، متدها و اعضا وجود ندارد
بسیاری از مشکلات 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>'
مراحل حل:
در جایی که از کلاسها یا متدهای Firebase در کد استفاده میکنید، مطمئن شوید که با داشتن دستورالعملهای
using
صحیح برای محصولات خاص Firebase مورد نیاز، آنها را در دسترس قرار میدهید.بررسی کنید که بسته های Firebase مناسب را وارد کرده اید:
- برای وارد کردن بسته های مناسب یا:
- Firebase Unity SDK را به عنوان
.unitypackage
s یا اضافه کنید - یکی از گزینه های موجود در گزینه های نصب Additional Unity را بررسی و اجرا کنید.
- Firebase Unity SDK را به عنوان
- اطمینان حاصل کنید که هر محصول Firebase در پروژه شما و EDM4U :
- در همین نسخه هستند
- به صورت انحصاری
.unitypackage
یا منحصراً از طریق Unity Package Manager نصب شدند.
- برای وارد کردن بسته های مناسب یا:
اگر Firebase Unity SDK را قبل از نسخه "10.0.0" بهعنوان
.unitypackage
s وارد کردهاید، بایگانی zip Firebase Unity SDK حاوی بستههایی برای پشتیبانی .NET 3.x و .NET 4.x است. مطمئن شوید که فقط سطح .NET Framework سازگار را در پروژه خود گنجانده اید:- سازگاری بین نسخه های ویرایشگر Unity و سطوح NET Frameworks در Add Firebase به پروژه Unity شما بحث شده است.
- اگر بهطور تصادفی بستههای Firebase خود را در سطح .NET Framework اشتباه وارد کردید یا باید از استفاده از
.unitypackage
s به یکی از گزینههای نصب Unity Additional Unity بروید، تمیزترین راه حذف هر بسته Firebase از طریق روشهای ذکر شده در این بخش مهاجرت است. سپس همه بسته های Firebase را دوباره وارد کنید.
بررسی کنید که ویرایشگر شما در حال بازسازی پروژه شما است و تلاش شما برای پخش منعکس کننده آخرین وضعیت پروژه شما است:
- بهطور پیشفرض، ویرایشگر Unity طوری تنظیم شده است که هر زمان که تغییرات دارایی یا پیکربندی شناسایی شد، بازسازی شود.
- ممکن است این عملکرد غیرفعال شده باشد و ویرایشگر Unity روی بازخوانی/کامپایل مجدد دستی تنظیم شده باشد. این مورد را بررسی کنید و در صورت وجود یک رفرش دستی امتحان کنید.
خطاهای زمان اجرا حالت Play
اگر بازی شما شروع شد، اما در حین اجرا با Firebase با مشکل مواجه شد، موارد زیر را امتحان کنید:
اطمینان حاصل کنید که بستههای Firebase را در «Security & Privacy» در Mac OS تأیید کردهاید.
اگر هنگام راهاندازی بازی خود در ویرایشگر در سیستمعامل مک، دیالوگی به شما ارائه شد که میگوید: «FirebaseCppApp-<version>.bundle نمیتواند باز شود زیرا توسعهدهنده تأیید نمیشود.»، باید آن فایل بسته خاص را در آن تأیید کنید. منوی امنیت و حریم خصوصی مک.
برای انجام این کار، روی Apple Icon > System Preferences > Security & Privacy کلیک کنید
در منوی امنیتی، تقریباً در نیمهی راه صفحه، بخشی وجود دارد که میگوید ""FirebaseCppApp-<version>.bundle" از استفاده مسدود شد زیرا از یک توسعهدهنده شناسایی نشده است."
روی دکمه با عنوان Allow Anyway کلیک کنید.
به Unity برگردید و دوباره Play را فشار دهید.
سپس اخطاری مشابه اول را مشاهده خواهید کرد:
Open را فشار دهید و برنامه شما می تواند ادامه یابد. دیگر در مورد این فایل خاص از شما سوال نخواهد شد.
مطمئن شوید که پروژه شما حاوی فایل های پیکربندی معتبر است و از آن استفاده می کند
- مطمئن شوید که تنظیمات ساخت شما برای هدف مورد نظر شما (iOS یا Android) در File > Build Settings تنظیم شده است. برای بحث کامل تر، مستندات تنظیمات Unity Build را بخوانید.
- فایل پیکربندی را برای برنامه خود دانلود کنید (
google-services.json
برای Android یاGoogleService-Info.plist
برای iOS) و هدف را از کنسول Firebase در تنظیمات پروژه > برنامه های شما ایجاد کنید: اگر قبلاً این فایل ها را دارید، آنها را در پروژه خود حذف کنید. و آنها را با جدیدترین نسخه جایگزین کنید، مطمئن شوید که دقیقاً همانطور که در بالا نشان داده شده است بدون "(1)" یا سایر اعداد پیوست شده به نام فایل ها نوشته شده است. - اگر کنسول حاوی پیامی در مورد فایلهای موجود در
Assets/StreamingAssets/
است، مطمئن شوید که هیچ پیام کنسولی وجود ندارد که Unity قادر به ویرایش فایلها در آنجا نبوده است. - مطمئن شوید که
Assets/StreamingAssets/google-services-desktop.json
تولید شده و با فایل پیکربندی دانلود شده مطابقت دارد.- اگر به طور خودکار ایجاد نمی شود و
StreamingAssets/
وجود ندارد، دایرکتوری را به صورت دستی در فهرستAssets
ایجاد کنید. - بررسی کنید که آیا Unity اکنون
google-services-desktop.json
را ایجاد کرده است یا خیر.
- اگر به طور خودکار ایجاد نمی شود و
اطمینان حاصل کنید که هر محصول Firebase و EDM4U منحصراً از طریق .unitypackage
یا Unity Package Manager نصب شده است.
- هم پوشه
Assets/
و هم Unity Package Manager را بررسی کنید تا مطمئن شوید که Firebase SDK و EDM4U منحصراً از طریق یکی از روشهای دیگر نصب شدهاند. - برخی از افزونههای توسعهیافته توسط Google ، مانند Google Play، و افزونههای شخص ثالث ممکن است به EDM4U وابسته باشند. این افزونهها ممکن است شامل EDM4U در بستههای
.unitypackage
یا Unity Package Manager (UPM) خود باشند. مطمئن شوید که تنها یک کپی از EDM4U در پروژه شما وجود دارد. اگر بستههای UPM به EDM4U بستگی دارد، بهتر است فقط نسخههای UPM EDM4U را که میتوانید در صفحه Google APIs for Unity Archive پیدا کنید، نگه دارید.
اطمینان حاصل کنید که هر محصول Firebase در پروژه شما در همان نسخه است.
- اگر SDK های Firebase از طریق
.unitypackage
نصب شده اند، بررسی کنید که آیا همه کتابخانه هایFirebaseCppApp
درAssets/Firebase/Plugins/x86_64/
در یک نسخه هستند یا خیر. - اگر Firebase SDK از طریق Unity Package Manager (UPM) نصب شده است، Windows > Package Manager را باز کنید، «Firebase» را جستجو کنید و مطمئن شوید که همه بستههای Firebase در یک نسخه هستند.
- اگر پروژه شما حاوی نسخههای مختلفی از Firebase SDK است، توصیه میکنیم قبل از نصب مجدد همه Firebase SDKها، این بار با همان نسخهها، تمام SDKهای Firebase را به طور کامل حذف کنید. تمیزترین راه حذف هر بسته Firebase از طریق روش های ذکر شده در این بخش مهاجرت است.
خطاهای ساخت دستگاه حل کننده و هدف
اگر بازی شما در ویرایشگر کار می کند (پیکربندی شده برای هدف ساخت مناسب مورد نظر شما)، سپس بررسی کنید که External Dependency Manager for Unity (EDM4U) به درستی پیکربندی و کار می کند.
مخزن EDM4U GitHub حاوی راهنمای گام به گام برای این بخش از فرآیند است که باید قبل از ادامه آن را بررسی و دنبال کنید.
مشکلات "Single Dex" و کوچک سازی ( اجباری در صورت استفاده از Cloud Firestore)
در حین ساختن یک برنامه اندروید، ممکن است با مشکل ساخت مربوط به داشتن یک فایل dex مواجه شوید. پیام خطا شبیه به زیر است (اگر پروژه شما برای استفاده از سیستم ساخت Gradle پیکربندی شده باشد):
Cannot fit requested classes in a single dex file.
فایلهای .dex
برای نگهداری مجموعهای از تعاریف کلاس و دادههای کمکی مرتبط با آنها برای برنامههای Android استفاده میشوند. یک فایل dex تنها محدود به ارجاع به 65536 روش است. اگر تعداد کل روشها از تمام کتابخانههای Android در پروژه شما از این حد بیشتر شود، بیلدها شکست خواهند خورد.
دو مرحله زیر را می توان به صورت متوالی اعمال کرد. فقط در صورتی که Minification مشکل را حل نکرد multidex را فعال کنید.
Minification را فعال کنید
Unity Minification را در سال 2017.2 معرفی کرد تا کدهای استفاده نشده را حذف کند، که می تواند تعداد کل روش های مرجع را در یک فایل dex کاهش دهد. * این گزینه را می توان در تنظیمات پخش کننده > Android > تنظیمات انتشار > Minify پیدا کرد. * گزینه ها ممکن است در نسخه های مختلف Unity متفاوت باشند، بنابراین به اسناد رسمی Unity مراجعه کنید.
Multidex را فعال کنید
اگر پس از فعال کردن کوچکسازی، تعداد روشهای ارجاعشده همچنان از حد مجاز فراتر رفت، گزینه دیگری فعال کردن multidex
است. برای رسیدن به این هدف در Unity راه های مختلفی وجود دارد:
- اگر قالب سفارشی Gradle در تنظیمات پخش کننده فعال است،
mainTemplate.gradle
تغییر دهید. - اگر از Android Studio برای ساخت پروژه صادر شده استفاده می کنید، فایل build.gradle در سطح ماژول را تغییر دهید.
جزئیات بیشتر را می توان در راهنمای کاربر multidex یافت.
درک و رفع خطاهای زمان اجرا دستگاه هدف
اگر بازی شما در ویرایشگر کار می کند و می تواند برای دستگاه مورد نظر شما ساخته و نصب شود، اما با خطاهای زمان اجرا مواجه شدید، گزارش های تولید شده در دستگاه را بررسی و بررسی کنید .
این بخش نحوه بررسی گزارش های خود را برای خطاهای احتمالی و یکی از این خطاها که فقط در زمان اجرا روی دستگاه یا شبیه ساز رخ می دهد، توضیح می دهد.
اندروید
شبیه ساز
- گزارش های نمایش داده شده در کنسول شبیه ساز خود را بررسی کنید یا پنجره Logcat را مشاهده کنید.
دستگاه
با adb و adb logcat و نحوه استفاده از آنها آشنا شوید.
- در حالی که میتوانید از ابزارهای مختلف محیط خط فرمان خود برای فیلتر کردن خروجی استفاده کنید، گزینههای logcat را در نظر بگیرید.
یک راه ساده برای شروع یک جلسه ADB با یک صفحه تمیز این است:
adb logcat -c && adb logcat <OPTIONS>
که در آن
OPTIONS
هر پرچمی است که خط فرمان را برای فیلتر کردن خروجی عبور دهید.
استفاده از Logcat از طریق Android Studio
هنگام استفاده از Logcat از طریق Android Studio ابزارهای جستجوی بیشتری در دسترس هستند که ایجاد جستجوهای سازنده را ساده تر می کنند.
iOS
بررسی سیاهههای مربوط
اگر از یک دستگاه فیزیکی استفاده می کنید، آن را به رایانه خود وصل کنید. lldb را در Xcode بررسی کنید.
مسائل سوئیفت
اگر با گزارشهای خطا در ذکر swift مواجه شدید، در مورد آنها به بخش External Dependency Manager for Unity مراجعه کنید.
مراحل بعدی
اگر بازی شما همچنان دارای مشکلات کامپایل، ساخت و یا اجرای Firebase است، صفحه مربوط به Firebase SDK for Unity را بررسی کنید و مشکل جدیدی را ثبت کنید. علاوه بر این، برای اطلاع از گزینههای دیگر، به صفحه پشتیبانی Firebase مراجعه کنید.