עצירת קורוטינות
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 25 מתוך 63.
הקריאה ל־StartCoroutine מחזירה Coroutine, ידית לקורוטינה שהיא התחילה. שמור אותה בשדה, ו־StopCoroutine(handle) עוצרת את הקורוטינה במקום שבו היא מושהית: השורות שאחרי yield שלה לעולם לא ירוצו. StopAllCoroutines() עוצרת כל קורוטינה שהסקריפט התחיל. מקש הרווח מפעיל ומכבה את האזעקה הזאת:
Coroutine beeping;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
if (beeping == null)
{
beeping = StartCoroutine(Beep());
}
else
{
StopCoroutine(beeping);
beeping = null;
}
}
}
IEnumerator Beep()
{
while (true)
{
Debug.Log("Beep");
yield return new WaitForSeconds(1f);
}
}השדה לא מתרוקן מעצמו כשהקורוטינה נעצרת, לכן האזעקה מאפסת אותו ל־null, וכך לחיצה נוספת על מקש הרווח יודעת ששום דבר לא פועל. שתי דרכים שנראות נכונות לא עובדות. StopCoroutine(Beep()) קוראת שוב ל־Beep(), מה שיוצר קורוטינה חדשה שעדיין לא התחילה, ועוצרת אותה, כך שהאזעקה ממשיכה לצפצף. ו־enabled = false מכבה את Update() של הסקריפט, אבל הקורוטינות שלו ממשיכות לפעול. קורוטינה מסתיימת כשהיא נעצרת באמצעות הידית שלה או באמצעות StopAllCoroutines(), כשהיא מגיעה לשורה האחרונה שלה, או כשאובייקט המשחק שלה מושבת באמצעות SetActive(false) או מושמד.
אתגר
קללחיצה על Space מדליקה את הפתיל של Bomb: הקורוטינה Fuse רושמת ביומן Fuse lit, ממתינה fuseTime (3) שניות, רושמת ביומן Boom ומשמידה את הפצצה. לחיצה אמורה לנטרל אותה, אבל היא מכבה את הסקריפט, והפצצה עדיין מתפוצצת. תקנו את נטרול הפצצה:
- לחיצה בזמן שהפתיל בוער עוצרת אותו ורושמת ביומן
Defused. הפצצה נשארת. - לאחר מכן אפשר להדליק שוב את הפתיל בלחיצה על Space, והפעם, אם לא לוחצים, הפצצה מתפוצצת כעבור 3 שניות.
לחצו על Play, הדליקו את הפתיל, לחצו וצפו ב-Console, ואז לחצו על Check.
נסו בעצמכם
using System.Collections;
using UnityEngine;
public class Bomb : MonoBehaviour
{
public float fuseTime = 3f;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
StartCoroutine(Fuse());
}
if (Input.GetMouseButtonDown(0))
{
enabled = false;
Debug.Log("Defused");
}
}
IEnumerator Fuse()
{
Debug.Log("Fuse lit");
yield return new WaitForSeconds(fuseTime);
Debug.Log("Boom");
Destroy(gameObject);
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה פיזיקה ומשחקיות
1גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור4קורוטינות
הפעלההפעלה חוזרת, ביטול הפעלההקורוטינה הראשונה שלךלולאות בקורוטינותעצירת קורוטינותסיכום: ספירה לאחור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוף