«یا اللهُ یا رَبِّ یا حَیُّ یا قَیّوم یا ذَالجَلالِ وَ الاکرام اَسئَلُکَ بِاسمِکَ اَلعَظیم اَلاَعظَم اَن تَرزُقَنی رِزقاً حَلالاً طَیِّباً بِرَحمَتِکَ الواسِعَه یا اَرحَمَ الرّاحِمِین.»
کاهش حجم و بهینه سازی بازی در یونیتی یا انجین های دیگر بازی :: گیم اور _ بازیسازی با unity + مطالب متفرقه

گیم اور _ بازیسازی با unity + مطالب متفرقه

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

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

به نام خدا
--
گروه قدیم ما promakers.ir یا پرومیکرز بود که بالای هزار اموزش توش ساخته بودم به اسم sajjad3011 ولی حیف ادمین سایتش عوض کرد
حالا سوالی بود کاری بود این شمارمه

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

---
سوالی بود بذارید
نظر خصوصی نذارید
پاسخش سخته
دوست داشتید شماره بذارید تو واتساپ یا ایتا یا .... گروه بزنیم.
09358077198

بایگانی
پیوندها

منبع:gameover.blog.ir

تعداد راس ها و face های مدل رو کم کن(مل رو low polygon بساز. به زبون خودمونی همون لو پلی)
Material ها رو minimize کن.
حجم تکستچرها و UV ها رو کم کن.
فضای خالی تکستچرها رو با تکنیک های Overlapping تا می تونی حذف ن(overlapping یعنی همپوشانی)
از Per-Platform Texture Settings استفاده کن.(یه سری تنظیمات برای فشرده سازی تکستچر در خود یونیتی تعبیه شده.وقتی تکستچر رو توی کادر پروژه انتخاب می کنیم تنظیمات و خصوصیاتی توی inspector میاد حالا دقیق یادم نیست کدومش هست برای تنظیم فشرده سازی که برای تنظیم و فشرده سازی تگستچر برای اجرا روی هر پلتفرمی مثل اندروید یا مک و ویندوز و ... تعبیه شده)
--
نکته ی دیگه ای برای بهینه سازی و بالارفتن performance(کارایی پردازنده):
وقتی از کلاس transform استفاده می کنیم یک سری کارها به صورت فانکشنال(functionality) یا تابعی باید اجرا بشن که نیاز به پردازش بیشتر داره. بهتره که از کش یا ارجاع استفاه بشه. یعنی یه اشاره گر یا متغیر از اون بسازیم. مثل این کد :

void Awake()
{
//Cache Transform (MyTransform is a class variable)
MyTransform = transform;
}
void Update(){
//Update position using cached transform
MyTransform.localPosition = MyPosition;
}

نکته ی بعدی برای افزایش کارایی اینه که تا می تونیم از تابع Update کمتر استفاده کنیم و همینطور توابع مثل LateUpdate و FixedUpdate . این توابع برای رویدادها و رفتارهایی بکار می رن که باید طی زمان تغییر کنن. پس بهتره اونا رو کمتر استفاده کنیم.
مثلا نازی نیست سلامتی دشمن(Enemy) رو توی هر فریم چک کنیم. بلکه کافیه فقط زمانی متغیر health رو چک کنیم که حمله ای صورت بگیره(رویدادهای برخورد OnCollisionEnter و OnCollisionEnter2D و یا ....) به طور خلاصه با بهینه سازی کد می تونیم زمان CPU و GPU رو بهبود بدیم.

نکته ی بعدی: Collider ها رو در حد امکان کاهش بدید.

نکته ی بعد برای افزاریش کارایی: از کلاس GUI و OnGUI کمتر استفاده کنید چون چند بار در هر فریم اجرا میشه و بهتره فقط برای منوهای ساده استفاده بشه نه complex و پیچیده.

نکته ی بعدی: از تکستچرهای اطلس استفاده کنید(تکستچرهای اطلس به تکستچرهایی می گن که ابعادشون توانی از 2 باشه.مثل 8 یا 16 یا 32 یا 64 یا 128 یا 256 یا 512 و ....)(چون اگه نباشه یونیتی مجبوره خودش تبدیلات رو انجام بده.)

مبحث بعدی استفاده از Object Pooling و Static Batching هست.
object pooling یه مبحث برنامه نویسی پیشرفته تری هست . مثلا وقتی اسلحه شلیک می کنه داریم به صورت runtime و داینامیک پریفب گلوله(bullet) رو instantiate می کنیم. به جاش می تونیم قبلا چند گلوله رو ایجاد و در بافر پشت صحنه ی جاری مخفی کنیم(offscreen buffer) و وقتی لازم شد این گلوله های از پیش تولید شده رو از حالت hide در بیاریم و نمایش بدیم.این عملیات باعث افزایش کارایی و پردازش کمتر برای اختصاص حافظه در حین اجرا میشه(dynamic memory allocation) و مخصوصا روی سیستم های موبایل کاربرد ویژه ای داره که بحث برنامه نویسیش کمی پیچیده هست.

Static batching هم یک گزینه هست. برای اون دسته از ابجکت هایی که در حین بازی به هیچ وجه حرکت نمیکنن تیک گزینه ی Static check box رو می زنیم.که در بالا و راست خصوصیات ابجکت در inspector میتونیم تنظیمش کنیم که باعث optimizations(بهینه سازی) میشه.

نکته ی بعدی Skyboxes هست که باید یه سری تنظیمات رو برای آسمان های پانورما و ... در بازی انجام بدیم که به جای اینکه realtime همه چیز تولید بشه یه سری شبیه سازی های از قبل برای ایجاد ستاره ها و غیره از قبل بسازیم و استفاده از تکنیک های parallax effects و .... .

نکته ی بعدی : از نورهای پویا و سایه ها( Dynamic Lights and Shadows) کمتر استفاده کنید.(میشه از Light mapping و تکنیک نورپردازی از قبل رندر شده ی Beast استفاده کرد که در خود یونیتی تعبیه شده و می تونیم نورهای نامحدود بذاریم و bake کنیم)

بقیه هم خودتون برید دنبالش....
موافقین ۰ مخالفین ۱ ۹۴/۰۹/۰۲
مدیرکل

نظرات (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی