הקורוטינה הראשונה שלך
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 23 מתוך 63.
Update() חייבת להסתיים בכל פריים, ולכן היא לא יכולה להמתין. קורוטינה יכולה: זו מתודה שמשהה את פעולתה וממשיכה מאוחר יותר בדיוק מהמקום שבו נעצרה. היא מחזירה IEnumerator, שדורש את using System.Collections;, וכל yield return בתוכה הוא השהיה. ב־C#, yield return יוצרת מתודה שמוסרת את הערכים שלה אחד בכל פעם; Unity מבקשת את הערך הבא כשההמתנה מסתיימת. yield return null ממתין פריים אחד, ו־yield return new WaitForSeconds(3f) ממתין 3 שניות.
StartCoroutine(Cycle()) מפעילה קורוטינה. רמזור זה נדלק בירוק, עובר לצהוב כעבור 3 שניות, ולאדום אחרי שנייה נוספת:
using System.Collections;
using UnityEngine;
public class TrafficLight : MonoBehaviour
{
Renderer lamp;
void Start()
{
lamp = GetComponent<Renderer>();
StartCoroutine(Cycle());
}
IEnumerator Cycle()
{
lamp.material.color = Color.green;
yield return new WaitForSeconds(3f);
lamp.material.color = Color.yellow;
yield return new WaitForSeconds(1f);
lamp.material.color = Color.red;
}
}StartCoroutine מריצה את הקורוטינה עד ל־yield הראשון שלה מיד, ואז Start() ממשיכה; Unity ממשיכה להריץ אותה אחרי כל המתנה, כשהמשתנים המקומיים שלה נשארים כפי שהיו. קריאה ל־Cycle(); לבדה, ללא StartCoroutine, לא עושה דבר: היא יוצרת את המתודה המושהית ומשליכה אותה, ואף שורה ממנה לא רצה. ו־yield return 3f; אינה המתנה של 3 שניות: Unity מכירה רק אובייקטים של המתנה, כגון WaitForSeconds, ומתייחסת לכל ערך אחר כאילו מדובר בפריים אחד.
אתגר
קלהקוצים ממתינים מתחת לרצפה. גרום ל־Space להפעיל את המלכודת באמצעות קורוטינה בשם Spring:
- מיד: תעד
Click. - חצי שנייה לאחר מכן: הקוצים קופצים למעלה ביחידה אחת.
- 2 שניות לאחר מכן: הם שוקעים בחזרה למטה ביחידה אחת.
לחץ על הפעלה, לחץ על Space וצפה, ואז לחץ על בדיקה.
נסו בעצמכם
using System.Collections;
using UnityEngine;
public class SpikeTrap : MonoBehaviour
{
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
// הפעל את המלכודת באמצעות קורוטינה
}
}
// IEnumerator Spring(): לחיצה, המתנה של 0.5 s, עלייה של 1 יחידה, המתנה של 2 s, ירידה של 1 יחידה
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה פיזיקה ומשחקיות
1גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור4קורוטינות
הפעלההפעלה חוזרת, ביטול הפעלההקורוטינה הראשונה שלךלולאות בקורוטינותעצירת קורוטינותסיכום: ספירה לאחור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוף