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

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

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

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

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

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

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

بایگانی
پیوندها
gameover.blog.ir
مترجم: sajjad3011

فرق تابع Update و FixedUpdate و lastUpdate و Start و Awake و ... در یونیتی



در یونیتی بعضی توابع وجود دارند که با ترتیب های از پیش تعیین شده اجرا می شوند.ترتیب این اجرا رو در زیر می بینیم:


Editor

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

First Scene Load


Awake
این رویداد همیشه قبل از تابع Start اجرا می شود و همینطور بعد از اینکه یک prefab تکثیر یا instantiate میشه.
دقت کنید که اگه GameObject غیرفعال باشه،رویداد Awake اجرا نمیشه تا آنکه گیم ابجکت فعال بشه یا اینکه تابع در هر اسکریپت متصل شده به گیم ابجکت،فراخوانی بشه.

OnEnable

(این رویداد فقط زمانی اجرا میشه که گیم ابجکت فعال بشه)
با enable شدن گیم ابجکت،این رویداد اجرا میشه و می تونید کد دلخواه رو توش بنویسید و مثلا بگید اگه شی ،اکتیو شد فلان کد اجرا شه.

نکته :
توابع Awake و OnEnable برای تمام اسکریپت ها قبل از تابع Start و Update اجرا میشن.

 Before the first frame update(قبل از اجرای اولین محدوده زمانی)

تابع Start قبل از آپدیت اولین فریم اجرا میشه(به شرطی که اسکریپت فعال باشه)

In between frames(بین فریم ها)

OnApplicationPause
اگر بین فریم های تابع Update وقفه ای رخ بده این رویداد اجرا میشه.

Update Order(ترتیب اجرای توابع Update)

FixedUpdate:

اغلب اوقات این رویداد،بیش از رویداد Update تکرار می شود و می تواند چندین بار در هر فریم اجرا گردد.(قدرت این تابع برای مواردی هست که مثلا فیزیک خوب عمل نمی کنه یا ....). این تابع از یک تایمر یا زمانسنج قابل اعتمادتری نسبت به تابع Update بهره می برد.(مثلا توی بازی   FIFA2016 فکر می کنم توپ رفته توی گل ولی کامپیوتر می گه گل نیست. یکی از دلایلش ممکنه عدم تشخص فیزیک این بخش باشه که حالا نمی ونم فیفا رو با چه گیم انجینی نوشتن ولی قسمت فیزیک انجین اون از رویدادی مثل Update احتمالا به جای FixedUpdate استفاده کرده و یا هر چیز دیگه ای هست دقت کمتری داشته که سرعت بالا رو نتونستنه تشخیص بده در یک لحظه. FIFA رو با Frostbite game engine ساختند.)


Update:

در هر فریم از زمان،یک بار اجرا می شود و موثر در اجراهای فریم به فریم هست.
LateUpdate:

بعد از پایان تابع Update اجرا می شود.این تابع هم در هر فریم یه بار اجرا میشه.یکی از کاربردهای این رویداد زمانی هست که شما مثلا یک دوربین سوم شخص دارید،بعدش همه ی تنظیمات دوربین مثل چرخش یا غیره رو در این رویدد LateUpdate اجرا می کنید که بعد از انجام آخرین پردازش ها انجام بشه.این به ما این اطمینان رو میده که کاراکتر قبل از اینکه دوربین اونو دنبال کنه به طور کامل حرکت کرده.


Rendering(عملیات رندر)

  • OnPreCull: قبل از اینکه دوربین،صحنه را cull(گلچین) کند،اجرا میشه.Culling تعیین می کنه که کدوم گیم ابجکت ها باید توسط دوربین نمایش داده بشن.رویداد OnPreCull فقط قبل از culling اتفاق می افته.

  • OnBecameVisible/OnBecameInvisible:
    این رویداد ها زمانی اتفاق می افتند که یک گیم ابجکت نسبت به هر دوربینی مرعی یا نامرعی می شود.


  • OnWillRenderObject: اگر گیم ابجکت،visible (مرعی) باشد،فقط یک بار برای هر دوربین رخ می دهد.


  • OnPreRender: قبل از اینکه دوربین صحنه را رندر کند فراخوانی می شود.


  • OnRenderObject:بعد از رندر کامل صحنه به طور منظم،فراخوانی می شود. شما می توانید از کلاس GL یا Graphics یا DrawMeshNow  برای draw هندسه ی خاص در این لحظه استفاده کنید.
  • OnPostRender: بعد از اینکه دوربین،رندر صحنه را تمام کرد اجرا می شود.


  • OnRenderImage(Pro only):این رویداد،پس از تکمیل scene rendering یا تکمیل رندر صحنه،اجرا می شود تا اجازه عملیات post processing تصویر صفحه را صادر کند.(یعنی پردازش هایی پس از گرفتن عکس که باعث بهتر شدن رندر میشن)


  • OnGUI: در پاسخ به رویداد های GUI چند بار در هر فریم اجرا می شه. این تابع بر خلاف تابع Update که در هر فریم یک بار اجرا می شد،میاد و مثل fixedUpdate در هر فریم چند بار اجرا می شه و یک تابع قابل اعتماد هست. کدهای اون هم احتمالا با GPU یا هسته های کارت گرافیک اجرا میشن نه CPU ،پس به نظر می رسه بهینه تر باشه و تیک و لگ رو کمی حذف کنه ولی از طرفی ممکنه بعضی اوقات کارت گرافیک فقط پردازش هاش بالا بره پس توی کدنویسی این هم باید دقت کنید زیاد دستورات پیچیده نذارید یا اگه می ذارید دقت کنید شرط بذارید تا زیاد پیچیده نشه و فقط وقتی لازم بود دستورات پیچیده تر اجرا بشن.

           رویدادهای Layout  و Repaint ابتدا اجرا می شن و برای هر Input Event ،از یک رویداد صفحه کلید/ماوس پیروی می کنند.


  • OnDrawGizmos برای نمایش Gizmos برای اهداف بصری در نمای صحنه بکار می رود.

Coroutines(کو روتین ها)

کوروتین های معمولی پس از برگشت یا return های تابع Update اجرا می شوند.

یک کوروتین تابعی است که اجرای خودش را مسدود یا suspend می کند(در اصلاح می گیم yield) تا زمانیکه که YieldInstruction (ساختار yield)پایان یابد. از coroutine ها استفاده های متعدی می شه:

  • yield بعد از اینکه توابع Update در فریم بعدی فراخوانی شدند،coroutine ادامه یا continue داده می شه.
  • yield WaitForSeconds بعد از یک تاخیر زمانی مشخص،پس از اینکه همه ی توابع Update برای فریم،فراخوانی شدند،ادامه پیدا می کند.
  • yield WaitForFixedUpdate پس از اینکه همه ی FixedUpdate  روی تمام اسکریپت ها فراخوانی شدند،اجرا می شود.
  • yield WWW پس از اتمام دانلود توسط کلاس WWW  ادامه می یابد.
  • yield StartCoroutine کوروتین را زنجیر می کند و برای کوروتین MyFunc (تابع دلخواه من)صبر خواهد کرد تا ابتدا کامل شود.

When the Object is Destroyed(وقتی گیم ابجکت نابود شد)


  • OnDestroy: این تابع زمانی اجرا میشه که همه ی آپدیت های فریم برای آخرین فریم گیم ابجکت موجود فراخوانی شود.(ابجکت باید در پاسخ به Object.Destroy یا در اتمام یک صحنه نابود شود)

When Quitting(زمان خروج)


  • OnApplicationQuit: این تابع قبل از اینکه از اپلیکیشن خروج کنیم روی همه ی ابجکت ها فراخوانی می شود.در editor وقتی اجرا می شود که کاربر play را stop کند.در web player زمانی فراخوانی می شود که پلیر صفحه ی وب را ببندد.
  • OnDisable: وقتی اجرا می شود که گیم ابجکت یا رفتار آن disable،غیر فعال یا در اصطلاح inactive شود.

Script Lifecycle Flowchart
(فلوچارت دوره ی حیات اسکریپت)

شکل زیر ترتیب و تکرار توابع رویداد را طی دوره حیات اسکریپ،به طور خلاصه نمایش می دهد

http://s9.picofile.com/file/8268257992/monobehaviour_flowchart.png

http://s9.picofile.com/file/8268257992/monobehaviour_flowchart.png

نظرات (۴)

مقاله بسیار خوبی بود. تا حالا تابع late update رو ندیده بودم
پاسخ:
مرسی
بیا تو کانال ما لطفا:
@gameoverblog

عالی... ولی جا داشت کامل تر باشه ... 5ستاره☻

مقاله خیلی خوبی بود ... موفق باشید.

پاسخ:
دیدم یه جاهایی نیازه خودم گیج شده بودم تست و خطا و تجربه کردم با ترجمه . هههه. مرسی

بیا کانال
 @gameoverblog

مقاله بسیار مفیدی بود ... ممنون

پاسخ:
مرسی

ارسال نظر

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