הפעלה
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 21 מתוך 63.
Invoke("Explode", 3f) קוראת פעם אחת למתודה של הסקריפט עצמו, Explode, בעוד 3 שניות, והקוד שאחריה ממשיך מיד. Unity מאתרת את המתודה לפי שמה, שמועבר כמחרוזת, והמתודה אינה מקבלת פרמטרים. הפצצה הזאת מתפוצצת 3 שניות אחרי שהמשחק מתחיל:
void Start()
{
Invoke("Explode", 3f);
}
void Explode()
{
Debug.Log("Boom");
Destroy(gameObject);
}מכיוון שהשם הוא מחרוזת, המהדר אינו יכול לבדוק אותו. Invoke("Explod", 3f) מתקמפל, וכעבור 3 שניות Unity רושמת ביומן את Trying to Invoke method: Bomb.Explod couldn't be called. במקום שהפצצה תתפוצץ. nameof של C# פותרת את הבעיה: nameof(Explode) היא המחרוזת "Explode", שהמהדר יוצר משם שהוא בדק, ולכן שגיאת הקלדה בתוכה גורמת לשגיאת קומפילציה שתופיע לפני שהמשחק פועל. יש לכתוב Invoke(nameof(Explode), 3f);.
אתגר
קלהPlatform שבין שתי הבליטות מתפוררת. ה-Rigidbody שלה קינמטי, לכן היא תלויה באוויר. כתבו את הסקריפט Crumble שלה:
- כשהשחקן נוחת עליה, היא ממתינה
delayשניות (1 ב-Inspector), ואז נופלת. - הנפילה מתבצעת באמצעות מתודה בשם
Fall: היא מפעילה את הפיזיקה של הפלטפורמה (isKinematic = false) ורושמתCrumble!. - לפני שהשחקן נוגע בה, הפלטפורמה נשארת במקומה.
השתמשו ב-nameof עבור שם המתודה. לחצו על Play והתקדמו אל הפלטפורמה בעזרת החצים, ואז לחצו על Check.
נסו בעצמכם
using UnityEngine;
public class Crumble : MonoBehaviour
{
public float delay = 1f;
Rigidbody body;
void Start()
{
body = GetComponent<Rigidbody>();
}
void OnCollisionEnter(Collision collision)
{
// כשהשחקן נוחת: גרמו לפלטפורמה ליפול כעבור delay שניות
}
// Fall(): הפעילו את הפיזיקה של הפלטפורמה וכתבו ליומן Crumble!
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה פיזיקה ומשחקיות
1גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוף