یک بازی ممکن است از نظر گرافیک و گیمپلی کامل باشد اما اگر روی دستگاه کاربران با لگ، افت فریم، مصرف بالای باتری یا کرش اجرا شود، تجربه نهایی آسیب میبیند. بهینه سازی بازی یونیتی به معنی حذف تصادفی افکتها و کاهش کیفیت همه چیز نیست؛ هدف این است که ابتدا گلوگاه واقعی پیدا شود و سپس همان بخش به شکل هدفمند اصلاح گردد.
در بازیهای موبایل این موضوع اهمیت بیشتری دارد، زیرا تفاوت سختافزاری میان دستگاهها بسیار زیاد است. پروژهای که روی کامپیوتر توسعهدهنده با 120 فریم اجرا میشود ممکن است روی یک گوشی میانرده به زیر 30 فریم برسد. بنابراین تست و Profiling باید روی پلتفرم واقعی انجام شود.
در JPGames بهینهسازی میتواند شامل بررسی کد، رندرینگ، حافظه، فیزیک، Assetها، UI و تنظیمات Build باشد. قبل از تغییرات گسترده باید مشخص شود فشار اصلی روی CPU، GPU یا Memory قرار دارد.
بهینه سازی بازی یونیتی چگونه باعث افزایش FPS میشود؟
FPS نتیجه مدت زمانی است که سیستم برای آمادهکردن هر Frame نیاز دارد. اگر اجرای Scriptها، فیزیک، Animation یا Rendering بیش از بودجه زمانی هر فریم طول بکشد، نرخ فریم کاهش پیدا میکند. ابزار Unity Profiler کمک میکند مشخص شود زمان هر فریم دقیقاً کجا مصرف میشود.
بررسی CPU
در سمت CPU مواردی مانند اجرای تعداد زیادی Update، محاسبات سنگین، Instantiate و Destroy مداوم، مسیریابی دشمنان، فیزیک پیچیده و Garbage Collection میتوانند عامل افت فریم باشند.
یکی از روشهای رایج استفاده از Object Pooling است. به جای ساخت و حذف مداوم گلولهها، دشمنان یا افکتها، نمونهها از قبل ساخته میشوند و در زمان نیاز فعال یا غیرفعال میشوند. این روش در بازیهایی با Spawn زیاد میتواند فشار پردازنده و حافظه را کاهش دهد.
بررسی GPU و Rendering
اگر گلوگاه روی GPU باشد، باید Shaderها، نورها، سایهها، رزولوشن، Post Processing، تعداد Draw Call و پیچیدگی Meshها بررسی شوند. کاهش تعداد Polygon به تنهایی همیشه مشکل را حل نمیکند؛ گاهی یک Shader سنگین یا تعداد زیاد Material تأثیر بیشتری دارد.
- کاهش Materialهای غیرضروری
- استفاده صحیح از Static Batching یا GPU Instancing
- تنظیم کیفیت Shadow
- کاهش Overdraw در UI و ذرات
- استفاده از LOD برای مدلهای دور
- مدیریت Post Processing بر اساس توان دستگاه
چرا بازی روی موبایل لگ میزند؟
لگ روی موبایل میتواند دلایل مختلفی داشته باشد. گاهی بازی در چند دقیقه اول روان است ولی پس از افزایش دمای دستگاه، سیستم عامل توان پردازنده را محدود میکند. در موارد دیگر مصرف حافظه بالا باعث بستهشدن بازی یا بارگذاریهای طولانی میشود.
مصرف بیش از حد حافظه
Textureهای بسیار بزرگ، AudioClipهای بدون فشردهسازی مناسب، Meshهای سنگین و نگهداشتن Assetهای بدون استفاده در حافظه از عوامل رایج هستند. مدیریت صحیح Addressables یا روشهای بارگذاری مرحلهای میتواند در پروژههای بزرگ مفید باشد.
Garbage Collection
ایجاد مداوم دادههای موقت در هر Frame باعث تخصیص حافظه و در نهایت اجرای Garbage Collector میشود. این فرایند ممکن است Spike ایجاد کند و بازیکن آن را به شکل مکث کوتاه احساس کند. بررسی Allocationهای تکرارشونده یکی از مراحل مهم Profiling است.
بهینه سازی فیزیک در Unity
Physics در بازیهای سهبعدی یا پروژههایی با تعداد زیاد Collider میتواند هزینه قابل توجهی داشته باشد. استفاده بیدلیل از Mesh Collider پیچیده، Rigidbodyهای زیاد یا Raycastهای متعدد در هر Frame باعث افزایش پردازش میشود.
تنظیم Layer Collision Matrix کمک میکند اشیایی که هیچ نیازی به برخورد با یکدیگر ندارند وارد محاسبات فیزیک نشوند. همچنین نرخ Fixed Timestep باید متناسب با نیاز گیمپلی تنظیم شود و کاهش یا افزایش آن بدون بررسی میتواند روی کیفیت حرکت و عملکرد اثر بگذارد.
آیا UI هم میتواند باعث افت FPS شود؟
بله. Canvasهای بزرگ، تغییر مداوم Layout، تعداد زیاد Graphic Raycaster و پنلهایی با عناصر نیمهشفاف میتوانند هزینه پردازشی ایجاد کنند. در بعضی پروژهها تغییر یک Text یا عنصر UI باعث Rebuild بخش بزرگی از Canvas میشود.
تقسیم UI به Canvasهای منطقی، غیرفعالکردن Raycast Target برای عناصر غیرتعاملی و کاهش Layoutهای تو در تو میتواند عملکرد را بهتر کند.
بهینه سازی بازی یونیتی برای دستگاههای ضعیفتر
همیشه لازم نیست همه کاربران دقیقاً یک سطح کیفیت را دریافت کنند. میتوان Quality Profileهای مختلف تعریف کرد تا دستگاههای قویتر از سایه و افکت بیشتر استفاده کنند و دستگاههای ضعیفتر تنظیمات سبکتری داشته باشند. مهم این است که Core Gameplay در همه دستگاههای هدف روان باقی بماند.
| بخش | نمونه اقدام بهینهسازی |
|---|---|
| CPU | کاهش Updateهای غیرضروری و Pooling |
| GPU | بهینهسازی Shader، سایه و Draw Call |
| Memory | فشردهسازی Texture و مدیریت Asset |
| Physics | کاهش Collider و محاسبات برخورد |
| UI | کاهش Rebuild و Overdraw |
آیا کاهش کیفیت گرافیک اولین راهحل است؟
خیر. اگر افت فریم از یک حلقه کدنویسی یا Garbage Collection ایجاد شده باشد، کاهش رزولوشن Texture مشکل اصلی را حل نمیکند. برعکس اگر GPU کاملاً اشباع باشد، بهینهکردن چند تابع ساده C# ممکن است تأثیر محسوسی نداشته باشد. تصمیم درست باید بر اساس داده Profiler گرفته شود.
چه ابزارهایی برای بررسی عملکرد Unity استفاده میشوند؟
Unity Profiler ابزار اصلی برای بررسی CPU، GPU، Rendering، Memory و بخشهای مختلف پروژه است. Frame Debugger برای بررسی ترتیب Draw Callها مفید است و Memory Profiler نیز برای تحلیل مصرف حافظه کاربرد دارد. در موبایل بهتر است Profiling روی خود دستگاه انجام شود.
علاوه بر ابزارها، داشتن سناریوی تست ثابت ضروری است. برای مثال میتوان عملکرد پروژه را در شلوغترین مرحله، بیشترین تعداد دشمن یا پیچیدهترین نمای دوربین اندازهگیری کرد تا نتیجه اصلاحات قابل مقایسه باشد.
زمان و هزینه بهینه سازی پروژه چقدر است؟
مدت کار به شدت مشکل و وضعیت فعلی پروژه بستگی دارد. اگر یک گلوگاه مشخص وجود داشته باشد ممکن است اصلاح محدود کافی باشد، اما پروژهای با معماری نامناسب، Assetهای سنگین و چند مشکل همزمان به بررسی گستردهتری نیاز دارد.
بهتر است ابتدا Audit عملکرد انجام شود و موارد دارای بیشترین تأثیر اولویتبندی شوند. این روش از صرف زمان روی بهینهسازیهای کماثر جلوگیری میکند.
چه اطلاعاتی برای شروع بررسی نیاز است؟
نسخه Unity، پلتفرم هدف، مدل دستگاههایی که مشکل روی آنها مشاهده شده، FPS فعلی و شرایطی که افت عملکرد رخ میدهد اطلاعات مفیدی هستند. اگر Profiler Capture یا ویدیوی مشکل وجود داشته باشد، تشخیص اولیه سریعتر خواهد بود.
اگر بازی شما با افت FPS، لگ، داغشدن موبایل، مصرف بالای حافظه یا زمان بارگذاری طولانی روبهرو است، میتوانید پروژه را برای بررسی فنی JPGames ارسال کنید تا گلوگاههای اصلی شناسایی و مسیر بهینهسازی بر اساس اولویت مشخص شود.