برخی از تکنیک های موثر بهینه سازی بازی برای بالارفتن سرعت رندر و افزایش کارایی در یونیتی
دوشنبه, ۵ بهمن ۱۳۹۴، ۰۴:۱۶ ق.ظ
منبع:gameover.blog.ir
حذف سایه ها و شرطهای اضافه تابع Update و استفاده از FixedUpdate.
cache کردن کلاس ها مثل tranform و ... مثال :
کد :
private Transform _transform; void Start () { _transform = this.transform;//cache for optimization }
نکته:بعضی اوقات بهتره انیمیشن ها رو توی یک تابع بذاریم و بعدش StartCoRoutine کنیم اون تابع رو،عوض اینکه بیایم و مستقیم اونو اجرا کنیم.
مثال از اجرا:
using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { IEnumerator WaitAndPrint() { // suspend execution for 5 seconds yield return new WaitForSeconds(5); print("WaitAndPrint " + Time.time); } IEnumerator Start() { print("Starting " + Time.time); // Start function WaitAndPrint as a coroutine yield return StartCoroutine("WaitAndPrint"); print("Done " + Time.time); } }
سعی کنید تکستچر های شما atlas(اتلس) یا دارای ابعادی با توان 2 باشن مثل 8 در 8 یا 8 در 32 یا 32 در 8 یا 16 در 64 یا 128*256 یا 64*64 یا 128*256 یا 512*512 یا 512*256 و ..... .
اگه اتلس نباشه خود یونیتی مجبوره اونو تبدیل به اتلس کنه و یکم پردازش اضافه مصرف میشه.
نکته : سعی کنید مدل های شما دارای مثلثات و پولیگان های کم باشه.
نکته بعدی:زیاد از پارتیکل مثل دود و آتش و مه و بارون و پکیج های بیخود استفاده نکنید و اگه هم استفاده کردید فقط توی زمان های لحظه ای اونا رو توی بازی فعال کنید.
نکته بعدی : اشیای ثابت رو انتخاب و گزینه static رو در inspector تیک بزنید.همچنین قسمتای پشت دیوارها یا غیر ضروری حذف کنید.
نکته بعدی: نورها رو لایت مپ(lightmap) کنید (تکنیک beast)
نکته بعدی:بعضی وقتا انیمیشن ها رو غیر فعال کنید و به جای تابع آپدیت سعی کنید توی OnTriggerEnter/2d بگید مثلا اگه کاراکتر به دشمن نزدیک شد دشمن انیمیشن بشه و توی OnTriggerExit/2d بگید اگه کاراکتر از محدوده دشمن خارج شد دشمن انیمیشن اش استاپ بشه و ... .
نکته بعدی: وقتی تیر می زنید پس از چند ثانیه سعی کنید تیر رو destroy کنید. اشیای غیر ضروری دیگه هم همونطور.
نکته بعدی: به جای متریال و شیدرها بهتره که از تکستچر های uv map استفاده کنید.
نکته بعدی: استفاده از چند انیماتور توصیه نمیشه و اگه هم استفاده کردید سعی کنید یک الگوریتم زمانبندی بنویسید که هر جا لازم بود یکی را غیر فعال و فقط یکی در هر لحظه فعال باشه مگر در صورت نیاز هر دو رو فعال کنید.
نکته بعد: کلایدرهای بیخود رو حذف یا بهینه کنید(در قسمت add component می تونید چند کلایدر مختلف تایپ کنید و بدید به مدل یا اسپرایتتون...نکته اگه edge colider کار نکرد بعضی اوقات بهتره باکس کلایدر بدید)
نکته بعدی: گزینه ی cast shadow و فقط برای اجسامی که خیلی مهم هستن در سایه گذاری انتخاب کنید و بقیه رو سعی کنید غیر فعال کنید تا بازی بهینه تر بشه.هر جا سایه گذاری ارزش نداشته باشه و سرعت اجرای بازی اولویت داشته باشه بهتره سایه رو غیر فعال کنید با غیر فعال کردن همین cast shadow.
نکته بعدی: نوع شیدر رو بهتره توی inspector روی vertexLit بذاریم. چون پردازش کمتری نیاز داره هر چند کیفیت ممکنه تا حدی بیاد پایین. چون دو نوع تکستچر هست یکی پیکسلی،specular و ... هست که پردازش بیشتری می خواد و زیبایی بیشتری داره و یکی ورتکس هست که پردازش کمتر و زیبایی کمتر داره. شما باید دقت کنید که چه جسمی رو پیکسلی و چه جسمی رو ورتکسی انتخاب کنید. مثلا ساختمان هایی که خیلی دور هستن و لازم نیست که از نزدیک بهشون خیره بشیم رو vertexLit shader بدید.
نکته ی بعدی: اندازه ی بافت تصاویر کوچک بازی که زیاد به چشم نمیان رو کم کنید . مثلا گزینه ی max size رو برای تکستچر آجرها یا اشیای دیگه روی سایز کم تر بذارید تا حدی که قابل تحمل باشه.(برای bumped texture ها هم همینکارو کنید)
نکته ی بعدی: اگه می خواید تمام اجسام رو یه دفعه اپتیمایز کنید به منوی Edit->Project settings->Quality برید و اونجا می تونید تنظیمت دیگه ای انجام بدید مثل اینکه سایه ها رو روی hard بذارید یا حذف کنید. رزولوشن سایه ها و تکستچرها رو می تونید به طور تقریبی تنظیم کنید که روی low باشه.گزینه ی shadow distance رو اگه کم کنید سایه زیاد تا دور دست رندر نمیشه و یکم بهینه تر میشه.گزینه ی texture quality هم بای کم کردن کیفیت بافت تکستچرهای کل بازی هست که اینم می تونه بازی رو بهینه کنه.گزینه ی anisotropic texture هم اگه از کار بندازید جزئیات کم میشه.گزینه ی دیگه anti aliasing هست که لبه های عکس ها رو برامون تنظیم می کنه و اگه کمتر باشه تا یه حدی بهتره.
برای نور پردازی از تکنیک لایت مپ lightmap یا beast استفاده کنید:
http://gameover.blog.ir/1394/04/27/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%AA%DA%A9%D9%86%DB%8C%DA%A9-beast-%D9%88-%D9%86%D9%88%D8%B1%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%DB%8C-lightmap-%D9%88-bake-%D8%AF%D8%B1-%DB%8C%D9%88%D9%86%DB%8C%D8%AA%DB%8C-%D8%A7%D8%B6%D8%A7%D9%81%D9%87-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AA%D8%B9%D8%A7%D8%AF-%D8%A8%DB%8C%D8%B4%D9%85%D8%A7%D8%B1-%D9%86%D9%88%D8%B1
۹۴/۱۱/۰۵