مهم ترین روش های بهینه سازی در بازی سازی (بخش اول)

بازگشت به آخرین اخبار بلوط گیمز

مهم ترین روش های بهینه سازی در بازی سازی (بخش اول)

در مطالبی که مطالعه خواهید کرد، سعی کردم به تمامی مواردی که در استودیو بلوط گیمز برای بهینه سازی بازی هایمان انجام می دهیم اشاره کنم.

چرا بهینه سازی بخش مهمی در بازی سازی است؟

شاید اکثر ما در هنگام بازی مخصوصا در مواقع حساس و مراحل سخت ، کند شدن بازی رو تجربه کرده باشیم که باعث باختن یا از دست دادن امتیاز شده است. اگر این مشکل از خود بازی باشد باعث نارضایتی کاربر خواهد شد.از این رو سرعت بالا و روان بودن بازی ها اهمیت بالایی برای کاربران دارد.

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

بازی سازان با بهینه کردن بخش های مختلف یک بازی (الگوریتم ها و استاندارد های کد ، تصاویر ، موزیک و صدا و… ) می‌توانند تعامل کاربران را با بازی افزایش دهند تا آنها لذت بیشتری از بازی برده و مدت زمان زیادی ، سرگرم بازی باشند.

هرچه کاربر مدت زمان بیشتری را صرف بازی کند ، احتمال درآمدزایی از او ، بیشتر خواهد بود.

چگونه از بهینه بودن یا نبودن بازی خود مطمئن شویم؟

در بازی سازی برای گوشی های هوشمند به دلیل وجود موبایل هایی با سخت افزار متفاوت ، انجام بهینه سازی اندکی پیچیده است. گوشی هایی با کمترین امکانات سخت افزاری هم باید توانایی اجرای بازی با بالاترین کارایی و کمترین افت سرعت را داشته باشند.

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

برای اینکار می توان گوشی هایی که بیشترین تعداد آن در بازار وجود دارد رو به عنوان گوشی تست انتخاب کرد تا بازی را روی آن نصب کنیم و متوجه مشکلات احتمالی موجود در بازی شویم.برای مثال گوشی j5 و j7  سامسونگ از گوشی های پرمخاطب بازار ایران هست که می‌توان کارایی بازی را با آنها تست کرد.

البته ابزاری مانند Profiler یونیتی و ابزارهای مشابه دیگر هم برای چک کردن کارایی بازی وجود دارد که بعدا به صورت مفصل به آنها خواهیم پرداخت.

روش های بهینه سازی:

در ادامه بهینه سازی را در ۳  بخش زیر بررسی می‌کنیم:

بهینه سازی در کد نویسی

بهینه سازی فایل های تصویری

بهینه سازی فایل های صوتی

قبل از شروع این قسمت بهتر است یک نکته مهم رو بدانید

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

بهتراست زمانی وارد بهینه سازی شویم  که مشکل در بازی وجود دارد و در تست ، متوجه آن شدیم یا کاربران زیادی مشکل هنگ کردن بازی و نامناسب بود کارایی بازی رو گزارش دادن.

بهینه سازی در کد نویسی

  1.  GetComponent و Find
  1. توابع GetComponent و Find از جمله توابع پرکاربردی هستند که بازی سازان برای راحت تر شدن کارشان استفاده می‌کنند.

کار اصلی تابع Find همانطور که از اسمش  مشخص است، پیدا کردن GameObject های مورد نظر برنامه نویس در ادیتور یونیتی است. این تابع در حین عملیات جستجو، کار سنگینی را انجام می‌دهد که باعث سربار زیاد برای دستگاه هایی که بازی رو آن اجرا می‌شود خواهد بود.

همینطور تابع GetComponent که برای گرفتن Component های مورد نظر برنامه‌نویس هست سربار بالایی دارد و بهتر است از این توابع استفاده نشود.

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

برای مثال در اسکریپت بالا ما می‌خواهیم از کلاس Order یک رفرنس (نمونه) داشته باشیم. برای اینکار در ابتدا نام GameObject که به آن اسکریپت Order داده شده را جلوی تابع Find همانطور که می‌بینید ، می‌نویسیم. سپس یک متغیر از کلاس Order به نام myOrder ساخته و مقداری که تابع Find برمی‌گرداند را ، در myOrder می‌ریزیم.

برای اینکه بتوان به کلاس Order دسترسی داشت،  باید روی GameObject که توسط Find پیدا شده ، تابع GetComponent را فراخوانی کنیم و کلاس Order را به عنوان Component دریافت کنیم.

پس از این کار ما یک رفرنس از کلاس Order خواهیم داشت و هرجایی که نیاز باشد از این کلاس یا ویژگی‌هاش استفاده می‌کنیم.

  1. تابع Update
  1. تابع Update نیز یکی از تابع های پرکاربرد یونیتی می‌باشد که برنامه نویسان برای کارهایی که در لحظه انجام می‌شود از آن استفاده می‌کنند. تابع Update در هر فریم بازی صدا زده می‌شود که کاربرد زیادی دارد.

در استفاده از Update باید هوشیار بود و در آن از حلقه ها یا تابع هایی که محاسبات سنگین در آنها اتفاق می‌افتد، استفاده نکرد.

در تابع Update می‌توان با استفاده از if عملکرد Update رو کنترل کرد. استفاده از if باعث می‌شود کار مورد نظر را در یک لحظه اجرا کرد و با خروج از آن سربار بالایی ایجاد نشود.

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

این کار باعث می‌شود که آپدیت در هربار اجرا شدن فقط زمانی وارد فرآیند مورد نظر ما شود که کلیکی اتفاق افتاده و در غیراینصورت وارد بقیه شرط های ما نخواهد شد

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

    برای مثال در کلاس زیر اگر Update قرار نیست استفاده شود باید Update پاک شود

  1. استفاده از GC برای آزاد کردن Ram
  1. همانطور که می‌دانید استفاده از Garbage Collector کمک شایانی به خالی شدن فضای Ram می‌کند. این کار باعث می‌شود سرعت بازی بالا رود.

ما در بازی هایمان GC رو در هنگام جابه‌جایی بین Scene ها صدا می‌زنیم. در هربار ورود به یک Scene تمامی اطلاعات از اول بارگذاری می‌شود و اطلاعات Scene قبلی یا اطلاعات اضافه دیگر که در Scene جدید نیاز به استفاده آن نیست ، با این کار از Ram پاک خواهد شد.با این کار Ram فضای بیشتری رو برای عملکرد هرچه بهتر خود خواهد داشت.

در تصویر زیر کد مربوطه به جا به جایی بین Scene ها آورده شده و صدا شدن GC را می‌بینید

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

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

نویسنده: سروش شهبازی

اشتراک گذاری پست

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

بازگشت به آخرین اخبار بلوط گیمز