במה פגעתי?
חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 9 מתוך 71.
ה־Collision ש־Unity מעבירה אל OnCollisionEnter מתאר את הצד השני של המגע. collision.gameObject הוא האובייקט שנתקלת בו, ולכן collision.gameObject.name הוא השם שלו, ו־collision.gameObject.CompareTag("Hazard") בודק מה התג שלו. (collision.collider הוא המתנגש המדויק שנגעת בו, כשלאובייקט יש כמה כאלה.)
מכונית המתנגשים הזאת מתעדת כל דבר שהיא מתנגשת בו ומתלוננת על סכנות:
void OnCollisionEnter(Collision collision)
{
Debug.Log("Bumped into " + collision.gameObject.name);
if (collision.gameObject.CompareTag("Hazard"))
{
Debug.Log("Ouch!");
}
}השורה הראשונה שהיא מתעדת היא Bumped into Floor, ברגע שהמשחק מתחיל: גם הרצפה שעליה היא עומדת היא התנגשות. לכן סקריפט שמגיב לפגיעות תמיד בודק קודם במה הוא פגע. שים לב לאיזה אובייקט אתה מציין: CompareTag("Hazard") לבדו בודק את האובייקט שלך, ו־Destroy(gameObject) הורס את האובייקט שלך, ואילו Destroy(collision.gameObject) מסיר את האובייקט שפגעת בו.
אתגר
קלתן למפלסת השלג משימה: לפנות את הבלוקים שמתויגים Snow.
- הוסף ל־
Plowאתvoid OnCollisionEnter(Collision collision), כך שיפעל רק כאשרcollision.gameObject.CompareTag("Snow"). - בתוכו, הפעל את
Destroy(collision.gameObject);, הוסף 1 לשדהclearedוהדפס את"Cleared " + cleared.
לחץ על "שחק" ונהג לתוך השלג: כל בלוק נעלם והמסוף סופר אותו. ואז לחץ על "בדיקה".
נסו בעצמכם
using UnityEngine;
public class Plow : MonoBehaviour
{
public float speed = 3f;
private Rigidbody rb;
private int cleared;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
float h = Input.GetAxisRaw("Horizontal");
rb.linearVelocity = new Vector3(h * speed, rb.linearVelocity.y, 0);
}
// שלג שהמפלסת נתקלת בו: השמידו אותו, ספרו אותו ורשמו את הספירה ביומן
}
כל השיעורים ביחידה פיזיקה ומשחקיות
1גוף קשיח
כוח הכבידה והמסהדחיפה באמצעות AddForceקפיצה באמצעות מתקףFixedUpdate לפיזיקהמהירותגופים קינמטייםחזרה: משטח שיגור2התנגשויות
OnCollisionEnterבמה פגעתי?להישבר בעת פגיעהלעמוד על הקרקעניתור וחיכוךצורות Colliderסיכום: קיר שביר5פרויקט: מרוץ המטבעות
הכדור המתגלגלמטבעות לאיסוףתרגלו בעצמכם: Unity אונליין