כניסה ויציאה
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 19 מתוך 63.
מחולל מפעיל שתי הודעות נוספות. OnTriggerExit(Collider other) מופעל פעם אחת, בצעד הפיזיקה שבו החפיפה מסתיימת, בכל דרך שבה היא מסתיימת. OnTriggerStay(Collider other) מופעל בכל צעד פיזיקה כל עוד החפיפה נמשכת, 50 פעמים בשנייה כברירת מחדל, כמו FixedUpdate(). שלושתן מקבלות את אותו Collider.
זרם האוויר העולה הזה מרים כל דבר שצף בתוכו ומדווח כשהוא יוצא ממנו:
public float lift = 15f;
void OnTriggerStay(Collider other)
{
other.attachedRigidbody.AddForce(Vector3.up * lift);
}
void OnTriggerExit(Collider other)
{
Debug.Log(other.name + " left the updraft");
}כוח שייך לצעד פיזיקה, לכן OnTriggerStay מתאים לכך: הדחיפה מופעלת פעם אחת בכל צעד כל עוד הכדור נמצא בפנים, ונפסקת ברגע שהוא יוצא. לזרם האוויר העולה אין Rigidbody, לכן לכל מבקר חייב להיות אחד, ו-attachedRigidbody לעולם אינו null כאן. כדי לקבוע כמות לשנייה בתוך OnTriggerStay, הכפל ב-Time.deltaTime, שהוא אורך הצעד, 0.02, במהלך צעד פיזיקה. כל כניסה מפעילה OnTriggerEnter אחד ובהמשך OnTriggerExit אחד עבור אותו Collider.
אתגר
קלהBay הצהוב שצויר על רצפת המחסן הוא טריגר, ו־lamp היא נורת האזהרה שעל העמוד שלצדו. כתבו את LoadingBay כך שהנורה תציג אם יש משהו בתא:
- כשהמשחק מתחיל התא ריק, לכן הנורה כבויה (
lamp.enabled = false). - כל עוד יש לפחות עצם אחד בתא, הנורה דולקת.
- כשהעצם האחרון יוצא, הנורה נכבית שוב.
שתי ארגזים והשחקן יכולים להיות בתא בו־זמנית, לכן יציאה של אחד מהם לא אומרת שהתא ריק. לחצו על Play ודחפו את הארגזים פנימה והחוצה באמצעות החצים, ואז לחצו על Check.
נסו בעצמכם
using UnityEngine;
public class LoadingBay : MonoBehaviour
{
public Light lamp;
// המנורה דולקת כל עוד יש משהו באזור הטעינה, וכבויה כשהוא ריק
}
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה פיזיקה ומשחקיות
1גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוף