آموزش بازی سازی: آشنایی با آنالیز فنی بازی در موتور یونیتی
اگر چه از حدودا ۶۰ مقالهی آموزش بازیسازی که در خدمت شما بودهایم تمامی آنها دربردارندهی نکات فنی پیادهسازی یک بازی نبودهاند، اما با یک نگاه ساده هم میتوانیم بگوییم که پیادهسازی بخشی از این نکات گفته شده هم بدون این که بتوانیم تاثیر آن را بر عملکرد بازی خود ارزیابی کنیم، امکانپذیر نخواهد بود.
همیشه بهترین راه در تشخیص عملکرد تکتک اجزای بازی، استفاده از ابزارهای پروفایلر است که مختصری در مورد آنها در مقالهی چالشهای پیادهسازی یک اتمسفر جذاب توضیح دادیم. همچنین با توجه به این که غالب بازیسازان تازهکار به سمت موتور یونیتی جذب میشوند و در کل این موتور بازیسازی هم در ایران طرفداران بسیاری دارد، تمامی توضیحات ما در این زمینه بر مبنای این موتور خواهد بود. البته تقریبا عملکرد تمامی این پروفایلرها شبیه به همدیگر است و صرفا با یادگیری اصول کار کردن با یکی از آنها به راحتی میتوانید با چنین ابزارهایی در موتورهای دیگر هم کار کنید.
از پروفایلر چه موقعی استفاده میشود؟
واقعیت مسئله این است که از همان زمان آغاز شروع فرآیند پیادهسازی اجزای بازی درون موتور، استفاده از ابزار پروفایلر شروع میشود. دلیل این مسئله این است که یک بازیساز حتی کمتجربه هم بعد از مدتی میداند که مثلا فلان بخش از بازی نباید از فلان میزان مشخص بیشتر منابع مصرف کند و اگر این گونه است حتما پیادهسازی آن ایراد دارد. به عنوان مثال اگر نگاهی به مستند ساخت بازی The Last of Us انداخته باشید در قسمتی از آن یکی از طراحان بازی میگوید که هر یک از انیمیشنهای درون بازی نباید در زمان اجرا بیشتر از ۴ یا ۵ مگابایت فضای رم را اشغال کند و این مسئلهای است که در پس تجربه به راحتی توسط طراحان و مسئولین فنی بازی به دست میآید. حتی اگر مقالهی قبلی ما با عنوان نکات فنی توسعه بازی موبایل را مطالعه کرده باشید هم ما در آن جا روی این مسئله تاکید کردهایم که یکی از تمرینهای مناسب برای هر بازیساز تازهکاری میتواند بررسی پروژههای آماده به منظور بررسی میزان مصرف منابع سختافزاری هر یک از بخشهای آنها باشد. این گونه با کمی تمرین میتوانید پس از مدتی از همان ابتدای کار تکتک اجزای بازی را در زمان وارد کردن به موتور بازی مورد ارزیابی قرار دهید.
ابزار پروفایلر یونیتی
پس از این که موتور یونیتی را اجرا کرده و پروژهای درون آن ساختید به راحتی میتوانید در همان ابتدا با استفاده از منوی Window در بالای صفحه گزینهی Profiler را انتخاب کنید تا پنجرهی مربوط به این ابزار در موتور یونیتی برای شما باز شود.
پس از باز شدن، پنجرهی آن را در جایی مناسب و در صورت امکان عریض قرار دهید تا این گونه بتوانید دید بهتری روی پارامترهای فراوان آن داشته باشید. اما در مورد این ابزار باید بدانید که فعال شدن این ابزار به صورت خودکار و همزمان با اجرای بازی است. پس از اجرای بازی درون ویرایشگر یونیتی میتوانید در پنجرهی مربوط به پروفایلر به صورت لحظهای بخشهای مختلف بازی را مشاهده کنید. همچنین شما برای این که بتوانید میزان کارکرد GPU را در بخش آنالیز مشاهده کنید میتوانید هماند تصویر زیر از بخش Add Profiler گزینهی مربوط به GPU را فعال کنید.
بهتر است بدانید که در ابتدا ممکن است در بخش مربوط به آنالیز GPU بازی هیچ اطلاعاتی به شما نشان داده نشود و صرفا با صفحهای همانند عکس زیر مواجه شوید.
غالبا چنین چیزی به خاطر باگ نرمافزاری موتور یونیتی رخ میدهد و با یک بار توقف کامل و اجرای دوبارهی بازی میتوانید چنین مشکلی را برطرف کنید. البته بر اساس اسناد خود یونیتی اگر شما قابلیت Graphics Jobs Experimental راه هم در بخش Player Setting فعال کرده باشید چنین مسئلهای برای شما رخ میدهد و برای همین باید این گزینه را در هنگام پروفایل کردن بازی خود غیر فعال کنید. پس از اجرای بدون مشکل پروفایلر یونیتی وقت آن است که بخشهای مختلف آن را برای شما توضیح دهیم.
در ابتدا گزینههای بالای پنجرهی پروفایلر یا همان کنترلهای آن را برای شما توضیح میدهیم. به طور پیشفرض گزینهی Record فعال است و برای همین شما به محض اجرای بازی خودتان مشاهده میکنید که پروفایلر به صورت لحظهای بازی اجرا شده را آنالیز و اطلاعات آن را روی نمودار و ... نشان میدهد. برای خاموش کردن پروفایلر کافی است یک بار روی این گزینه کلیک کنید. گزینهی بعدی Deep Profile است و شما با فعال کردن آن میتوانید آنالیز تمامی اسکریپهای خود را هم در اختیار داشته باشید که به طور مشخص به شما در پیدا کردن بخش پرهزینه کدهای شما یاری میکند. البته فعال کردن این قسمت به خصوص اگر چندین اسکریپت پیچیده درون بازی داشته باشید بسیار هزینهبر است و برای همین ممکن است اجرای بازی شما همانند قبل روان نباشد. با این حال در بیشتر موارد در بازیهای کوچک فعال کردن چنین چیزی مشکلی برای شما پیش نخواهد آورد.
گزینهی بعدی Profile Editor است که با کلیک روی آن میتوانید وضعیت اجرا شدن ویرایشگر یونیتی یا همان صفحهای که روبروی شما قرار دارد را مشاهده کنید. تنها مسئلهای که در این میان وجود دارد این است که حواستان جمع باشد هنگامی که Deep Profile فعال است این گزینه را فعال نکنید چرا که به دلیل پیچیده بودن یونیتی به یکباره اجرای یونیتی به شدت کند شده و ممکن است مجبور شوید برای درست شدن اوضاع یکبار موتور یونیتی را بسته و دوباره باز کنید!
گزینه بعدی Connected Player است که به صورت پیشفرض روی گزینهی Editor قرار دارد. اگر شما مثلا گوشی موبایل خود را با رعایت شرایط به رایانه متصل کنید میتوانید نام آن را در این بخش مشاهده کنید. مثلا اگر شما میخواهید بازی یا مرحلهی خود را به طور مستقیم روی گوشی موبایل آزمایش کنید کافی است در ابتدا از بخش تنظیمات گزینهی Developer Option را فعال کنید. سپس از گزینههای موجود در این قسمت تیک گزینهی USB Debugging را گذاشته و سپس گوشی را با کابل به رایانه متصل کنید. سپس میتوانید با استفاده از گزینهی Buid and Run پروژهی خود را به طور مستقیم روی گوشی نصب کرده و اجرا کنید. البته حواستان باشد که قبل ساخت و اجرای بازی گزینههای Development Build و Autoconnect Profiler را هم در قسمت Project Settings بگذارید.
در انتها هم برای مشاهدهی اطلاعات مربوط به اجرای بازی روی گوشی موبایل میتوانید از گزینه Connected Player گوشی موبایل خود را انتخاب کنید. سه گزینهی بعدی Clear، Load و Save هستند که به ترتیب برای پاک کردن محتویات پروفایلر، بارگذاری اطلاعات ذخیره شدهی قبلی و همچنین ذخیرهی اطلاعات فعلی مورد استفاده قرار میگیرند. در سمت راست و انتهای نوار هم چند گزینه برای جابجایی روی فریمهای تولید شده در پروفایلر قرار دارد که با چند بار آزمایش میتوانید به راحتی به آنان مسلط شوید.
همچنین به عنوان آخرین نکته در این بخش شما میتوانید در هر لحظهای که نیاز داشتید با کلیک روی نمودارهای تولید پروفایلر به طور خودکار اجرای بازی را به طور موقت نگه داشته و به آن اطلاعاتی که میخواهید نگاه کنید. سپس با کلیک روی گزینهی ادامه میتوانید جریان آنالیز را دوباره فعال کنید.
تحلیل اطلاعات
اگر همانند تصویر زیر به نوار میانی ابزار پروفایلر دقت کرده باشید، در قدم اول میتوانید مدت زمانی را که برای آماده شدن هر فریم برای رسیدن به دست ما طول میکشد مشاهده کنید.
مثلا در تصویر بالا مدت زمانی که طول کشیده تا کارهای بازی در فریم مورد نظر انجام بگیرد در پردازنده حدودا ۹ میلی ثانیه طول کشیده که این مقدار در مورد پردازندهی گرافیکی به حدود ۴۶ میلی ثانیه افزایش مییابد. ما فعلا کاری به علت وقوع این موضوع نداریم که چرا نرخ فریم بازی در این لحظه اینقدر افت پیدا کرده است اما به عنوان اولین برداشت میتوانیم این گونه در نظر بگیریم هنگامی که زمان پردازندهی گرافیکی از پردازندهی مرکزی بیشتر است، اصطلاحا گلوگاه سیستم در این نقطه پردازندهی گرافیکی آن است. این مسئله همانند این میماند که پردازنده کارهای خودش را به سرعت انجام داده و منتظر این میماند که پردازندهی گرافیکی کار خودش را انجام دهد تا بعد از آن پردازندهی مرکزی سراغ فریم بعدی برود. البته اگر در بخش مربوط به پردازندهی گرافیکی همانند آن چیزی که نشان دادیم، اطلاعاتی درج نشده بود، شما صرفا میتوانید با نگاه به اطلاعات پردازنده چنین چیزی را تشخیص بدهید.
کافی است ابتدا روی نوار افقی CPU Usage کلیک کنید. بعد از آن میتوانید از کادر پایینی ردیف مربوط به Gfx.WaitForPresent را مشاهده کنید. اگر مقدار این ردیف همانند تصویر زیر بسیار زیاد بود میتوانید همان نتیجهگیری قبلی را هم در این جا داشته باشید. در چنین وضعیتی شما بهتر است توصیههایی را به صورت قدم به قدم انجام دهید که به دلیل طولانی و پیچیده بودن آنها سعی میکنیم تمامی آنها را در مقالهی آموزشی بعدی توضیح دهیم.
همچنین اگر حالت برعکس این مسئله رخ داده باشد و همانند تصویر زمان پردازش پردازنده مرکزی بیشتر از پردازندهی گرافیکی باشد اصطلاحا گلوگاه بازی ما در این نقطه پردازندهی مرکزی است و برای این مسئله هم آشنایی با ساز و کار پردازنده در بازیهای رایانهای و اجرای چند توصیه قدم به قدم میتواند به شما در رفع مشکل کمک کند که همانند حالت قبل آن را به طور کامل در مقالهی آینده برای شما توضیح خواهیم داد.
به علاوهی موارد گفته شده شما میتوانید در هر یک از ردیفهای بخش پروفایلر اطلاعات مربوط به یک بخش را مشاهده کنید که معمولا برای حافظهی رم از واحد مگابایت و برای مثلا رابط کاربری (UI) از همان واحد میلیثانیه استفاده شده است. البته در مورد بخش فیزیک باید به این نکته اشاره کنیم که واحد این بخش بر اساس تعداد اشیا فعال بر اساس زیر شاخههایی است که در سمت چپ و در زیر قسمت فیزیک به آنها اشاره شده است. مثلا بر اساس اطلاعات همین بخش میتوانید به این جمعبندی برسید که متناسب با آن چیزی که در تصویر مشاهده میکنیم آیا لازم است که به تعداد فلان مقدار اشیا داینامیک یا صلب درون بازی داشته باشیم که حتی در مواقعی که درون صحنه نیستند هم قسمتی از منابع را برای پردازش مقادیر خود صرف کنند.
اما به عنوان نکتهی آخر برای مشاهدهی پارامترهای اساسی همانند آن چه در زیر نام هر بخش درج و رنگی برای آن درنظر گرفته شده، شما میتوانید با کلیک روی مربع کوچک کنار هر عنوان، آن گزینه را از بخش نمودارهای پروفایلر حذف کنید و مثلا در انتها صرفا یک گزینه را برای بررسی باقی بگذارید، همانند کاری که در تصویر زیر برای شاخص VSync انجام دادهایم.
حال اگر آن پارامتر به نسبت تاثیر خود بیش از حد در حال مصرف منابع است میتوانید آن را از بخش تنظیمات حذف کرده یا اصلاحات مورد نظرتان را صورت دهید. مثلا در همین مثال ما با غیرفعال کردن قابلیت V Sync توانستیم یه جهش بزرگ را در نرخ فریم بازی تجربه کنیم.
نظرات