לולאות בקורוטינות
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 25 מתוך 71.
לולאה עם 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) מתאימה בקורוטינה כל עוד היא משהה את הביצוע בכל איטרציה; בלי השהיה היא לעולם לא מחזירה את השליטה לפריים, ועורך Unity קופא.
אתגר
קלכתבו את Ride כך ששער הסורג יעבור מסלול מלא אחד.
- הגדירו
Vector3 up = down + Vector3.up * height;. כל עוד מתקייםwhile (transform.position != up), הזיזו אותו באמצעותVector3.MoveTowards(transform.position, up, speed * Time.deltaTime)והשתמשו ב-yield return null;. - רשמו ביומן
Open, ואז השתמשו ב-yield return new WaitForSeconds(1f);. - הורידו אותו בחזרה אל
downבאותה הדרך, ואז רשמו ביומןClosed.
לחצו על „שחק” ולחצו על מקש הרווח: השער עולה, ממתין ונסגר. לאחר מכן לחצו על „בדיקה”.
נסו בעצמכם
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פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוףתרגלו בעצמכם: Unity אונליין