הקורוטינה הראשונה שלך
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 24 מתוך 71.
על 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, ומתייחסת לכל ערך אחר כאילו הוא פריים אחד.
אתגר
קלגרום למלכודת הקוצים לקפוץ באמצעות מקש הרווח בעזרת קורוטינה.
- כתוב
IEnumerator Spring(): רשום ביומןClick, ואזyield return new WaitForSeconds(0.5f);, ואזtransform.position += Vector3.up;. - לאחר מכן המתן 2 שניות באותה דרך והסר שוב את
Vector3.up. - בתוך
ifשל מקש הרווח, הפעל אותה באמצעותStartCoroutine(Spring());.
לחץ על "שחק" ולחץ על מקש הרווח: הקוצים קופצים למעלה ואז שוקעים. לאחר מכן לחץ על "בדיקה".
נסו בעצמכם
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פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוףתרגלו בעצמכם: Unity אונליין