تبلیغات

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

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

اجرای کد بعد از گذشت یک زمان در یونیتی با متد StartCoroutine
یک روش دیگری که ساده‌تر است به انتهای مطلب لینک شد


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

کد زیر را در نظر بگیرید:

متد StartCoroutine، نام یک متد دیگری را از ما دریافت کرده و سپس آن را اجرا می‌کند. همچنین متد بایسیتی IEnumerator را برگرداند. و داخل متد از دستور yield طبق کد بالا، برای ایجاد وقفه استفاده می‌کنیم. در کد بالا، ما 5 ثانیه وقفه ایجاد کرده و سپس عبارت «FuLLKade.COM» را پرینت کرده‌ایم.

یک مثال پیچیده

مثال: فرض کنید می‌خواهیم یک آبجکتی در صحنه‌ی خود قرار دهیم و اسکریپتی برای آن بنویسیم که در هر 2 ثانیه، 10 درجه در راستای محور y ها بچرخد!

  1. یک صحنه‌ی جدید ایجاد کرده و اسم آن را برای مثال TimeDelay بگذارید.
  2. یک GameObject از نوع Cube در صحنه‌ی خود قرار دهید.
  3. یک اسکریتپ سی‌شارپ به اسم RotateDelay ایجاد کرده و آن را به صورت زیر کامل کنید:

پروپرتی ها

  • ySpeed: مشخص می‌کند که در هربار چه اندازه در راستای محور y ها چرخش داشته باشد.
  • dealyTime: مشحص می‌کند که در هربار، چقدر برای چرخش بعدی تاخیر داشته باشد.
  • haveRotate: مشخص می‌کند که آیا چرخشی داریم یا خیر. (برای توقف چرخش)

متد Check

این متد که خودمان آن را نوشته‌ایم، مقدار haveRotate را بررسی کرده و سپس چرخش را شروع می کند. یعنی اگر haveRoate برابر true باشد، بنابراین چرخش داشته و StartCoroutine را برای تابعی به نام delay ایجاد می‌کند.

متد delay

در داخل متد delay، یک حلقه‌ی while با شرط true بودن haveRotate وجود دارد و داخل این متد به مدت delayTime و با استفاده از yield مکث می‌کنیم و سپس به اندازه‌ی ySpeed چرخشی انجام می‌دهیم؛ همچنین متد delay را در متد check، پس از بررسی کردن haveRotate، توسط StartCoroutine، فراخوانی می‌کنیم.

درمورد StartCoroutine  و yield و IEnumerator و … بعدا در پست‌های جدایی توضیحات کاملی خواهیم داد و فعلا به صورت کلیشه‌ای بدانید که در هربار مکث داخل متد delay از کد زیر استفاده می کنیم.

که به جای delayTime ، آن زمانی که می‌خواهیم مکث صورت گیرد را قرار می‌دهیم؛ این زمان نیز برحسب ثانیه است.

متد Update

در این متد بررسی کرده‌ایم که اگر کلید R فشرده شود، مقدار haveRotate برعکس شود؛ و سپس متد check فراخوانی شود.

تمرین

  1. یک ساعت با استفاده از این روش بنویسید.
  2. یک اسکریپتی بنویسید که با استفاده از متد MoveTowards ای که در کلاس Vector ها قرار دارد، از یک نقطه به یک نقطه‌ی دیگری حرکت کرده و برگردد و سپس همین عمل را از نو شروع کند و در هربار که به مقصد می‌رسد، تاخیری داشته باشد و سپس به نقطه قبلی خود برگردد. (آموزش تابع MoveTowards در یونیتی | حرکت مستقیم به یک نقطه مشخص)

همچنین بخوانید

تبلیغات
0
کانال تلگرام فول کده
تبلیغات

درباره نویسنده

هادی اکبرزاده

[ مدیر فول کده ]

علاقه‌مند به اشتراک گذاری اطلاعات در هر زمینه‌ای / برنامه‌نویس و دانشجوی ارشد رشته شبیه‌ساز هوشمند - در حال نوشتن یه رمان (اگه خدا بخواد و تموم شه ?)

پاسخ دهید

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

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