לולאות בקורוטינות
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 24 מתוך 63.
לולאה עם yield return בתוכה פועלת לאורך פריימים רבים, כי כל איטרציה מושהית לפני הבאה. בעזרת WaitForSeconds הלולאה חוזרת על פעולה בקצב קבוע. הסירנה הזאת מהבהבת 3 פעמים:
IEnumerator Flash()
{
for (int i = 0; i < 3; i++)
{
lamp.enabled = true;
yield return new WaitForSeconds(0.2f);
lamp.enabled = false;
yield return new WaitForSeconds(0.2f);
}
}עם yield return null הלולאה עושה קצת בכל פריים עד שהתנאי שלה מתקיים, וכך קורוטינה מנפישה משהו. הבלון הזה, שקנה המידה שלו הוא 1, גדל ב-0.5 לשנייה עד שקנה המידה שלו מגיע ל-2, ואז מדווח:
IEnumerator Inflate()
{
while (transform.localScale.x < 2f)
{
transform.localScale += Vector3.one * 0.5f * Time.deltaTime;
yield return null;
}
Debug.Log("Full");
}Time.deltaTime פועל כאן כמו ב-Update(): הקורוטינה ממשיכה פעם אחת בכל פריים, והשורה שאחרי הלולאה רצה רק כשהלולאה מסתיימת. בלי yield, כל הלולאה רצה בתוך פריים אחד והבלון מתמלא מיד. לולאת while (true) מתאימה בקורוטינה כל עוד היא מוותרת על השליטה בכל איטרציה; בלי yield היא לא תחזיר את השליטה לפריים, ועורך Unity יקפא.
אתגר
קלהמקש Space מפעיל את הקורוטינה Ride של שער הטירה Portcullis. כתוב את Ride כך שהשער יבצע מסלול מלא אחד:
- הוא עולה
height(3) יחידות במהירותspeed(1.5) יחידות לשנייה, נעצר בדיוק בחלק העליון ומתעדOpen. - הוא נשאר פתוח למשך שנייה אחת.
- הוא יורד בחזרה באותה מהירות למקום שבו התחיל (
down) ומתעדClosed.
לחץ על Play ולחץ על Space, ואז על Check.
נסו בעצמכם
using System.Collections;
using UnityEngine;
public class Portcullis : MonoBehaviour
{
public float speed = 1.5f;
public float height = 3f;
Vector3 down;
void Start()
{
down = transform.position;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
StartCoroutine(Ride());
}
}
IEnumerator Ride()
{
// עלה height יחידות במהירות speed ורשום ביומן Open, הישאר למשך 1 שנייה, רד בחזרה ורשום ביומן Closed
yield return null;
}
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה פיזיקה ומשחקיות
1גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור4קורוטינות
הפעלההפעלה חוזרת, ביטול הפעלההקורוטינה הראשונה שלךלולאות בקורוטינותעצירת קורוטינותסיכום: ספירה לאחור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוף