چرخه حیات توابع رویداد در یونیتی

اموزش بازی سازی با موتور یونیتی

چرخه حیات توابع در یونیتی

روند اجرایی توابع رویداد

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

این توابع مشخص به نام توابع رویداد یا Event Functions شناخته میشن . وعلت نامگذاریشون اینه که توابع رویداد در پاسخ به یک رویداد یا event فعال میشن . مثال هایی ازشون توابع Update و Start هستن.

بر اساس مستندات یونیتی ما هم براتون رایجترین توابع رو طبق کاربردشون دسته بندی کردیم :

توابع یکبار اجرا در صحنه

این توابع به ازای هر شی داخل بازی فقط یکبار تو صحنه فراخوانی میشن .

  • Awake : همیشه قبل از فراخوانی تابع Start و بعد از اینکه شی فعال میشه( مثلا یک شی Instantiate شده ) اجرا میشه .
  • OnEnable : زمانی فراخوانی میشه که شی فعال بشه . این اتفاق زمانی میافته که یک مرحله لود بشه یا یک شی داخل متن Instantiate بشه .
  • OnLevelWasLoaded : این تابع برای اطلاع دادن به بازی هست که یک مرحله جدید لود شده .

ادیتور

  • Reset : این تابع در سطح ادیتور هست و زمانی اجرا میشه که یک کامپوننت جدید داخل اینسپکتور اضافه کردین یا روی دکمه Reset داخل اینسپکتور زدین .

(بیشترین کاربردش برای مقدار دهی اولیه به متغیرهای داخل اینسپکتور هست. )

قبل از اجرای اولین فِرِم

  • Start : این تابع قبل از اجرای اولین فرم و قبل از فراخوانی تابع Update اجرا میشه که برای مقداردهی اولیه متغیر ها هم هست .

توابع بروزرسانی (Update)

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

– FixedUpdate

این تابع طبق یک زمانبندی منظم فراخوانی میشه . همه محاسبات فیزیکی و اپدیت ها بلافاصله بعد از فیکس اپدیت اتفاق میافتن . وقتی محاسبات حرکت رو داخل این تابع مینویسیم ، دیگه نیازی نیست مقدار هامونو در Time.deltaTime ضرب کنیم . چون خود این تابع مستقل از نرخ فرم با زمانبندی فراخوانی میشه.

– Update

اپدیت در هر فرم یکبار فراخوانی میشه . بنابراین هرچیزی که تغییر میکنه یا طبق قاعده ای اتفاق میافته تو این تابع نوشته میشه. مثل حرکت اشیا غیر فیزیکی ، تشخیص ورودی ها و … البته اپدیت طبق یک قاعده زمانبندی مشخص فراخوانی نمیشه . اگر یک فرم بیشتر از بعدی طول بکشه بنابراین زمان بین اپدیت ها متفاوت خواهد بود .

– LateUpdate

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

از بین بردن شی

  • OnDestroy : این تابع پس از تمام فریم های به روزرسانی برای آخرین فریم از وجود شی فراخوانی میشه .

هنگام خروج

  • OnDisable : این تابع زمانی فراخوانی میشه که رفتار غیرفعال میشه . مثلا اسکریپت متن یا حتی شی اصلی رو از طریق کد غیرفعالش کنیم.

فلوچارت چرخه کدنویسی در یونیتی

نمودار زیر خلاصه ای از توابع رویداد و ترتیب اجراشونو نشون میده .

چرخه حیات توابع رویداد در یونیتی