"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية تنفيذ التأخير في الوحدة من أجل اللعب وتسلسل الأحداث؟

كيفية تنفيذ التأخير في الوحدة من أجل اللعب وتسلسل الأحداث؟

نشر في 2025-02-06
تصفح:183

How to Implement Delays in Unity for Gameplay and Event Sequencing?

شرح مفصل لتنفيذ تأخير الوحدة

]

إنشاء التأخير في الوحدة أمر ضروري لإدارة تدفقات الألعاب ، وفرز الأحداث ، ومحاكاة سلوك العالم الحقيقي. فيما يلي بعض الطرق لتحقيق التأخير:

1. startCoroutine

: إعلان دالة coroutine.
  • waitforseconds : يتوقف عن التنفيذ لفترة محددة (متأثر بسرعة اللعبة).
  • waitforsecondsRealTime : يتوقف عن التنفيذ لفترة محددة (لا يتأثر بسرعة اللعبة).
  • مثال:
ienumerator waitforsecondsexample () { // تدوير 90 درجة transform.rotate (Vector3.Right * 90) ؛ // انتظر 4 ثوان (لا تتأثر بسرعة اللعبة) العائد على الإرجاع الجديد waitforsecondsrealtime (4) ؛ // تدوير 40 درجة transform.rotate (Vector3.Right * 40) ؛ // انتظر 2 ثانية (تتأثر بسرعة اللعبة) العائد على الإرجاع الجديد waitforseconds (2) ؛ // تدوير 20 درجة transform.rotate (Vector3.Right * 20) ؛ }

2.
IEnumerator WaitForSecondsExample()
{
    // 旋转90度
    transform.Rotate(Vector3.right * 90);

    // 等待4秒(不受游戏速度影响)
    yield return new WaitForSecondsRealtime(4);

    // 旋转40度
    transform.Rotate(Vector3.right * 40);

    // 等待2秒(受游戏速度影响)
    yield return new WaitForSeconds(2);

    // 旋转20度
    transform.Rotate(Vector3.right * 20);
}
أو

من أجل حلقة

: زيادة المؤقت تدريجياً حتى يتم الوصول إلى القيمة المطلوبة.
  • العائد على الإرجاع فارغ : إيقاف تنفيذ إطار واحد.
  • مثال: ienumerator timeBassedLoopexample () { // تدوير 90 درجة transform.rotate (Vector3.Right * 90) ؛ // انتظر 4 ثوان (متأثر بسرعة اللعبة) توقيت تعويم = 0 ؛ بينما (مؤقت

3.

IEnumerator TimeBasedLoopExample()
{
    // 旋转90度
    transform.Rotate(Vector3.right * 90);

    // 等待4秒(受游戏速度影响)
    float timer = 0;
    while (timer 
: لا يتم تعليق التنفيذ حتى يكون الشرط صحيحًا.

waitwhile : إيقاف التنفيذ عندما يكون الشرط صحيحًا.

  • مثال: ienumerator waituntilexample () { // انتظر حتى تصل درجة اللاعب إلى 100 إرجاع إرجاع New Waituntil (() => PlayersCore> = 100) ؛ // تحميل المستوى التالي Scenemanager.loadScene ("Nextlevel") ؛ }
  • 4.
استدعاء

: جدولة وظيفة لتنفيذها بعد تأخير محدد.

IEnumerator WaitUntilExample()
{
    // 等待玩家分数达到100
    yield return new WaitUntil(() => playerScore >= 100);

    // 加载下一关
    SceneManager.LoadScene("NextLevel");
}
: على غرار

استدعاء ، لكن الوظيفة تسمى بشكل متكرر على فترات زمنية محددة.

مثال:
  • استدعاء ("FeedDog" ، 5) ؛ invokerepeating ("MovePlayer" ، 0.5F ، 0.2F) ؛ ]
  • 5.
  • time.deltatime : تستخدم لقياس الوقت بين الإطارات.
  • متغير توقيت
: زيادة كل إطار حتى يتم الوصول إلى القيمة المطلوبة.

إذا كان
Invoke("FeedDog", 5); // 5秒后调用FeedDog()

InvokeRepeating("MovePlayer", 0.5f, 0.2f); // 每0.2秒调用MovePlayer(),持续0.5秒。

مثال:

تحديث باطل () { Timer = time.deltatime ؛ إذا (مؤقت> = 5) { // قم بتنفيذ الرمز بعد 5 ثوانٍ مؤقت = 0 ؛ feeddog () ؛ } }
  • حل مشكلتك:
  • لإنشاء تأخير عند عرض النص في البرنامج النصي الخاص بك ، يمكنك استخدام الكود التالي:
  • ienumerator showtextwithdelay () { textui.text = "مرحبًا بك في المعالج الرقمي!" ؛ إرجاع الإرجاع الجديد waitforseconds (3F) ؛ textui.text = ("أعلى رقم يمكنك اختياره هو" max) ؛ إرجاع الإرجاع الجديد waitforseconds (3F) ؛ textui.text = ("أدنى رقم يمكنك اختياره هو" min) ؛ } StartCoroutine (showtextWithDelay ()) ؛
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3