fade کردن در یونیتی
پنجشنبه, ۱ مهر ۱۳۹۵، ۰۲:۳۱ ق.ظ
gameover.blog.ir
کد با حلقه for:
void Fade() { for (float f = 1f; f >= 0; f -= 0.1f) { Color c = renderer.material.color; c.a = f; renderer.material.color = c; } }
نکته :
کد بالا حلقه for داره و بهینه نیست.چون حلقه ها پردازنده رو به شدت اشغال می کنند.
میایم از coroutine استفاده می کنیم یعنی توابع نوع IEnumerator :
IEnumerator Fade() { for (float f = 1f; f >= 0; f -= 0.1f) { Color c = renderer.material.color; c.a = f; renderer.material.color = c; yield return null; } }
برای مثال برای اجرای fading توسط فشردن کلید F ،برای اجرای تابع فوق داریم:
void Update() { if (Input.GetKeyDown("f")) { StartCoroutine("Fade"); } }
اگر بخوایم این اجرا خودکار و با تاخیر باشه از تابع WaitForSeconds یعنی انتظار برای چند ثانیه استفاده می کنیم که ورودی اش عدد اعشاری از نوع float هست.
مثال: WaitForSeconds(.1f)
کد نمونه:
IEnumerator Fade() { for (float f = 1f; f >= 0; f -= 0.1f) { Color c = renderer.material.color; c.a = f; renderer.material.color = c; yield return new WaitForSeconds(.1f); } }
هر جا نیاز شد جهت اجرا کد StartCoroutine("Fade") رو صدا بزنید.
دستور yield باعث میشه کامپایلر اجرای کد رو از جایی شروع کنه که تابع Fade رو صدا زدیم و با فراخوانی بعدی تابع Fade به خطی اشاره می کنه که اجرا متوقف شده بود.
۹۵/۰۷/۰۱