اجرای کد بعد از گذشت یک زمان در یونیتی با متد Invoke

اجرای کد بعد از گذشت یک زمان در یونیتی با متد Invoke

اجرای یکد بعد از گذشت یک زمان با متد Invoke در یونیتی


قبلا در این‌پست، به روشی اشاره کردیم که در آن با استفاده از متد StartCoroutine می‌توانستیم کدی را بعد از گذشت یک زمان مشخصی اجرا کنیم. و حالا گرچه آن روش برای خود مزیت‌هایی داشت، اما در این‌جا می‌خواهیم روش دیگری که ساده‌تر از StartCoroutine می‌باشد را معرفی کنیم.

در کلاس‌هایی که از MonoBehaviour مشتق می‌شوند، متدی به نام Invoke تعریف شده است! این متد، نام متد دیگری را که در اسکریپت نوشته‌ایم از ما دریافت کرده آن را بعد از گذشت یک زمان مشخصی اجرا می‌کند.

شاید بپرسید که چرا نام Invoke برای این کار مورد استفاده قرار می‌گیرد! اما اگر به معنای آن که دعا کردن می‌باشد دقت کنیم، خواهیم دانست که دعا پس از گذشت یک زمانی اجابت می‌شود (از صفر ثانیه تا بی‌‍نهایت)! بنابراین در هنگامی که یک متد Invoke می‌شود، آن متد پس از گذشت یک زمانی اجابت شده و فراخوانی می‌شود! و با این اصاف، دیگر هیچوقت متد Invoke را فراموش نخواهید کرد. 😀

تنظیم یک متد در Invoke

فرض کنید متدی با نام TimeFinished داریم که می‌خواهیم پس از یک ثانیه اجرا شود؛ بنابراین به صورت زیر عمل می‌کنیم:

Invoke("TimeFinished", 1);
از داخل هر متدی می‌توان خود آن متد را هم Invoke کرد. االبته به جز متدهای اصلی، یعنی چیزهایی مثل Update، Start و …

لغو متد تنظیم شده

فرض کنید متدی را تنظیم کرده‌ایم که بعد از گذشت یک دقیقه اجرا خواهد شد؛ اما وسط کار شرایطی پیشی می‌آید که این متد نباید اجرا شود و در آن صورت می‌توان به صورت زیر متد تنظیم شده را لغو کرد:

CancelInvoke("TimeFinished");

همانطور که می‌بینید، از متد CancelInvoke برای انجام این‌کار استفاده کرده‌ایم.

بررسی تنظیم بودن یک متد

برای بررسی اینکه یک متد، Invoke شده است یا خیر، از متد IsInoking به صورت زیر استفاده می‌شود:

bool isInvoking = IsInvoking("TimeFinished");
اگر بخواهیم بررسی کنیم که آیا اصلا متدی Invoke شده است یا نه، IsInvoking را بدون ورودی اجرا می‌کنیم.

مطالب مرتبط

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

cp-codfk

نظرات ثبت شده بدون دیدگاه

توضیحات پیشنهادی نظرات اشتراک