گرفتن خروجی اندروید از پروژه

یک پروژه بعد از کامل شدن قابلیت اجرای مستقیم بر روی پلتفرم هدف را ندارد؛ بلکه ابتدا باید در فرآیندی قرار گرفته تا از روی آن فایل(های) قابل درک برای پلتفرم هدف ایجاد شوند. به این فرآیند گرفتن خروجی (build) برای آن پلتفرم گفته می‌شود.

به عنوان نمونه بعد از خروجی گرفتن برای پلتفرم اندروید، کل پروژه در یک فایل نهایی با فرمت apk (و در صورت لزوم دیتای بازی) قرار می‌گیرد. با انتقال این فایل بر روی یک دستگاه اندرویدی می‌توان آن را نصب کرد و یا این فایل را در مارکت‌های اندرویدی منتشر نمود.

نکته

به منظور عدم دسترسی سایرین به assetهای بازی از طریق فایل نهایی، assetها به صورت رمزگذاری شده در آن قرار گرفته تا امکان استخراج آن‌ها از این طریق وجود نداشته باشد.

مراحل گرفتن خروجی (اندروید)

برای گرفتن خروجی از پروژه در یونیتی ابتدا پنجره‌ی Build Settings (واقع در منوی File > Build Settings) را باز می‌کنیم. سپس فایل asset صحنه‌هایی که قصد قرارگیری‌شان در فایل خروجی را داریم بر روی قسمت Scenes In Build با ماوس drag and drop می‌کنیم. این لیست از عدد ۰ شماره‌گذاری شده و ترتیب صحنه‌ها در آن دارای اهمیت است. صحنه‌ی شماره ۰ اولین صحنه‌ای خواهد بود که پس از اجرای بازی لود می‌شود. امکان تغییر ترتیب صحنه‌ها در این لیست با جابجایی‌شان توسط ماوس وجود دارد.

در مرحله‌ی بعد پلتفرم هدف خود (در اینجا Android) را از لیست سمت چپ پنجره انتخاب می‌کنیم. برای ایجاد امکان گرفتن خروجی برای هر پلتفرم در یونیتی قبل از هر چیز باید ماژول آن پلتفرم بر روی ادیتور نصب شده باشد.

نصب ماژول اندروید بر روی ادیتور

image

در صورتی که با کلیک بر روی پلتفرم هدف در پنجره‌ی Build Settings با پیغام No module loaded مواجه شدیم، به این معنی است که ماژول پلتفرم موردنظر بر روی ادیتور یونیتی نصب نیست. در این حالت تمام دکمه‌های این پنجره غیرفعال شده و امکان گرفتن خروجی برای آن پلتفرم وجود نخواهد داشت.

ماژول‌های هر پلتفرم به صورت فایل‌های نصب کننده‌ی جداگانه بوده که امکان دانلودشان از طریق کلیک بر روی دکمه‌ی Open Download Page موجود در سربرگشان در پنجره‌ی Build Settings وجود دارد. باید دقت نمود که ورژن ماژول با ورژن ادیتور تطابق داشته باشد.

image

بعد از نصب ماژول اندروید و اجرای مجدد ادیتور، با کلیک بر روی پلتفرم Android در پنجره‌ی Build Settings شاهد اضافه شدن تنظیمات پلتفرم و فعال شدن دکمه‌ها خواهیم بود:

image

بعد انتخاب پلتفرم موردنظر بر روی Switch Platform کلیک کرده تا پلتفرم هدف پروژه به اندروید تغییر کند (همان‌طور که در بخش‌های قبلی گفته شد بهتر است که این عمل در ابتدای ایجاد پروژه صورت گرفته باشد).

نکته

به منظور گرفتن خروجی برای یک پلتفرم خاص لزومی ندارد که پروژه حتماً بر روی آن Switch Platform شده باشد. گرفتن خروجی برای هر پلتفرم تنها با کلیک بر روی نام آن در لیست پلتفرم‌ها و کلیک بر روی دکمه‌ی Build امکان‌پذیر است. با این حال Switch Platform کردن پروژه قبل از طراحی بازی و خروجی گرفتن مزایای زیادی دارد. برای مثال در صورتی که از اسکریپت یا ابزاری استفاده شود که با پلتفرم ناسازگاری داشته باشد سریعاً متوجه وجود خطا خواهیم شد؛ همچنین در هنگام باز کردن پنجره‌ی Build Settings گزینه‌ی Platform به طور پیش‌فرض بر روی پلتفرم سوییچ شده قرار خواهد گرفت.

نصب JDK و SDK اندروید

هر برنامه‌ای که خروجی اندروید تولید می‌کند برای انجام این کار به دو کیت توسعه احتیاج دارد. یونیتی نیز از این قاعده مستثنی نیست. این دو کیت عبارتند از:

  • JDK: اپلیکیشن‌های اندروید از زبان برنامه‌نویسی جاوا استفاده می‌کنند. کیت توسعه‌ی جاوا (Java Development Kit) که به صورت رسمی توسط شرکت Oracle توسعه داده می‌شود وظیفه‌ی کامپایل و ترجمه‌ی پروژه به کدهای جاوای قابل درک توسط سیستم‌عامل اندروید را بر عهده دارد.

  • Android SDK: این کیت شامل ابزارهای لازم برای تولید اپلیکیشن اندروید از جمله کتابخانه‌های اندروید به زبان جاوا، شبیه‌ساز اندروید و… بوده که توسط گوگل عرضه می‌شود.

این دو کیت را از طریق یونیتی هاب دانلود کنید.

Player Settings

در این مرحله باید اقدام به وارد کردن تنظیمات فایل خروجی کرد. این تنظیمات با کلیک بر روی دکمه‌ی Player Settings و یا انتخاب گزینه‌ی Player Settings از منوی Edit > Project Settings > Player در Inspector نمایش داده می‌شوند.

تنظیمات فوق به دو بخش سراسری و وابسته به پلتفرم تقیسم می‌شوند:

image

تنظیمات سراسری بر روی خروجی تمام پلتفرم‌ها و تنظیمات وابسته به پلتفرم تنها بر روی آن پلتفرم خاص اعمال می‌شوند. به منظور دستیابی به تنظیمات مختص اندروید بر روی سربرگ آن کلیک می‌کنیم.

در ادامه گزینه‌های مهم‌تر Player Settings توضیح داده می‌شوند.

تنظیمات سراسری

  • Company Name: نام شرکت/شخص توسعه‌دهنده

  • Product Name: نام بازی (اپلیکیشن خروجی گرفته شده با نامی که در این قسمت وارد می‌شود بر روی دستگاه نصب می‌گردد)

تنظیمات اندروید

تنظیمات مختص به پلتفرم اندروید به شش دسته تقسیم شده‌اند که با کلیک بر روی هر دسته می‌توان گزینه‌های آن را نمایان کرد.

Icon: این قسمت مربوط به وارد کردن فایل‌های آیکون بازی (ترجیحاً با فرمت png) است.

نکته

در سیستم‌عامل اندروید چندین رزولوشن استاندارد برای ابعاد آیکون‌ها وجود دارد. این رزولوشن‌ها عبارتند از:

image

پس از طراحی آیکون برای اپلیکیشن اندروید، لازم است که به ازای هر رزولوشن استاندارد یک فایل آیکون با آن ابعاد ایجاد کرده و تمام آن‌ها را به پروژه وارد کنیم. بعد از نصب برنامه بر روی گوشی کاربر، آیکون متناسب با رزولوشن دستگاه برای او نمایش داده می‌شود.

هنگام طراحی آیکون اپلیکیشن اندروید از ابعاد ۵۱۲×۵۱۲ استفاده شده و سپس رزولوشن‌های کوچک‌تر از روی آن ساخته می‌شوند. فایل آیکون با ابعاد ۵۱۲×۵۱۲ تنها در هنگام ثبت اپلیکیشن در مارکت‌ها استفاده شده و در روند توسعه از آن استفاده‌ی مستقیمی نمی‌شود.

نکته

ابزارهای آنلاین فراوانی (از جمله Resize App Icon) وجود داشته که تصویر آیکون (با ابعاد ۵۱۲×۵۱۲) را دریافت کرده و فایل آیکون سایر رزولوشن‌ها را به صورت خودکار تولید می‌کنند.

Resolution and Presentation

  • Allowed Orientations for Auto Roation: در این قسمت می‌توان تعیین کرد که با قرارگیری دستگاه در کدام جهت‌ها (عمودی، عمودی وارونه، افقی و افقی وارونه) چرخش خودکار صفحه در آن جهت رخ دهد.

Splash Image: اسپلش تصویری است که در ابتدای بازی و قبل از اجرای آن نمایش داده می‌شود. این تصویر می‌تواند لوگوی تیم بازی‌سازی، لوگوی بازی یا پوستری از آن باشد.

  • Show Splash Screen: نمایش splash قبل از اجرای بازی

  • Show Unity Logo: نمایش لوگوی یونیتی در ابتدای بازی (امکان غیرفعال کردن این گزینه در لایسنس غیرتجاری یونیتی وجود ندارد)

  • لیست Logos: فایل‌های تصویری splashها برای نمایش در این لیست قرار می‌گیرند.

نکته

در هر لحظه امکان مشاهده‌ی پیش‌نمایش splash screen با کلیک بر روی دکمه‌ی Preview در این قسمت امکان‌پذیر است.

Other Settings

  • Package Name: نامی است که اپلیکیشن‌ها در مارکت‌های اندرویدی توسط آن شناخته و تمایز داده می‌شوند و در حکم کد ملی اپلیکیشن است. بدیهی است که هر اپلیکیشن اندروید باید نام پکیج اختصاصی خودش را داشته باشد و استفاده از نام پکیج اپلیکیشنی که از قبل در مارکت قرار دارد موجب عدم امکان انتشار آن می‌شود. به صورت مرسوم نام پکیج از سه کلمه تشکیل شده که با نقطه از هم جدا می‌شوند و دو کلمه‌ی اول معکوس آدرس سایت توسعه‌دهنده و کلمه‌ی آخر نام اپلیکیشن می‌باشد؛ به عنوان مثال: ir.unitycorn.testapp. البته اجباری در پیروی از این قرارداد وجود ندارد.
نکته

آدرس URL صفحه‌ی اپلیکیشن در مارکت گوگل پلی به صورت

https://play.google.com/store/apps/details?id=packageName

(برای مثال https://play.google.com/store/apps/details?id=com.instagram.android) می‌باشد.

  • Version: نسخه برنامه

  • Bundle Version Code: شماره‌ی انتشار (این اپلیکیشن چندمین خروجی گرفته شده است؟)

  • Minimum API Level: حداقل ورژن اندروید لازم برای اجرای اپلیکیشن. هر چه این عدد پایین‌تر باشد گستره‌ی بیشتری از گوشی‌های قدیمی امکان اجرای بازی را داشته و بالتبع امکان استفاده از برخی قابلیت‌های جدید اندروید از بین می‌رود.

گوگل به طور رسمی در بازه‌های کوتاه اقدام به ارائه‌ی آمار مختلف در رابطه با دستگاه‌های اندرویدی فعال می‌کند. یکی از مواردی که در این آمار بررسی می‌شود سهم هر نسخه از اندروید در بین دستگاه‌های فعال می‌باشد.

اغلب توسعه‌دهندگان برای تصمیم‌گیری در زمینه‌ی انتخاب Minimum API Level از این آمار کمک می‌گیرند.

image

سهم هر نسخه از اندروید (مه ۲۰۱۹)

Publishing Settings

  • Keystore: همان‌طور که گفته شد هر اپلیکیشن در اندروید با نام پکیج خود شناخته می‌شود. به منظور آن که تنها توسعه‌دهنده‌ی اصلی بتواند برای آن اپلیکیشن آپدیت منتشر کند (و سایر توسعه‌دهندگان اپلیکیشنی با آن نام پکیج منتشر نکنند) اولین نسخه‌ی اپلیکیشن توسط توسعه‌دهنده امضای دیجیتال می‌شود. این امضا فایلی با فرمت keystore بوده که دارای رمز عبور است و در یونیتی با ابزاری به نام Keystore Manager تولید می‌شود. هنگامی که قصد انتشار آپدیت برای یک اپلیکیشن داریم باید فایل امضا و رمز عبور آن را در اختیار داشته باشیم. در غیر این صورت امکان انتشار نسخه جدید با نام پکیج قبلی خود (در مارکتی که نسخه‌ی قبلی بازی در آن منتشر شده است) وجود نخواهد داشت.

پس از نصب یک اپلیکیشن بر روی گوشی، امکان آپدیت آن تنها در صورتی وجود دارد که نسخه‌ی جدید با همان فایل امضای نسخه‌ی قدیمی امضا شده باشد؛ در غیر این صورت با پیغام Application not installed مواجه می‌شویم. به همین علت نگهداری از فایل امضا و رمز آن بسیار حیاتی است. چون در صورت از بین رفتن آن تنها راه ممکن انتشار آپدیت استفاده از نام پکیج متفاوت خواهد بود که مارکت‌ها آن را به عنوان یک اپلیکیشن جدید تشخیص می‌دهند و تمام بازخوردهای مثبت و آمار نصب فعال نسخه‌ی قبلی در صفحه‌ی مارکت نادیده گرفته می‌شود.

برای ساخت امضای دیجیتال برای اپلیکیشن اندروید در یونیتی ار قسمت Publishing Settings گزینه‌ی Keystore Manager را انتخاب می‌کنیم. سپس در پنجره‌ی باز شده بر روی منوی Keystore کلیک کرده و پس از انتخاب گزینه‌ی Create New و سپس Anywhere مکان ذخیره‌ی فایل امضا را انتخاب می‌کنیم. در نهایت فیلدهای پنجره‌ی Keystore Manager را مطابق تصویر زیر پر کرده و بر روی Add Key کلیک می‌کنیم.

image

در این مرحله از فایل امضا بک آپ بگیرید.

بعد از انجام این مرحله به Inspector بازگشته و تیک گزینه‌ی Custom Keystore را انتخاب می‌کنیم. در این هنگام منوی Select در زیر این گزینه ظاهر می‌شود. با استفاده از آن مسیر فایل امضا را به یونیتی داده و در قسمت Password رمز فایل امضا را وارد می‌کنیم. سپس در قسمت Project Key بر روی منوی Alias کلیک کرده و نام کلید ساخته شده را انتخاب و در فیلد پایینی آن رمز کلید را وارد می‌کنیم.

image

در نهایت با کلیک بر روی دکمه‌ی Build پنجره‌ی Build Settings از پروژه خروجی می‌گیریم. در این پنجره دکمه‌ی دیگری نیز با نام Build And Run وجود دارد که با کلیک بر روی آن در صورتی که یک دستگاه اندرویدی واقعی و یا شبیه‌ساز اندروید از طریق adb به کامپیوتر متصل باشد، پس از گرفته شدن خروجی از پروژه، فایل نهایی بر روی آن اجرا می‌شود.