עצירת קורוטינות
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 26 מתוך 71.
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(), כשהיא מגיעה לשורה האחרונה שלה, או כשמבטלים את ההפעלה של ה-GameObject שלה באמצעות SetActive(false) או משמידים אותו.
אתגר
קלגרמו ללחיצה לנטרל את הפצצה בלי לכבות את הסקריפט.
- הוסיפו שדה
Coroutine fuse;. בלחיצה על Space, הציבוfuse = StartCoroutine(Fuse());. - בלחיצה, החליפו את
enabled = false;: כאשרfuse != null, קראו ל־StopCoroutine(fuse);, הציבוfuse = null;והציגו ביומןDefused.
לחצו על "שחק", לחצו על Space ואז לחצו: המסוף מציג Defused והפצצה נשארת. לאחר מכן לחצו על "בדיקה".
נסו בעצמכם
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פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוףתרגלו בעצמכם: Unity אונליין