Menu
CoddyTech

במה פגעתי?

חלק מהיחידה פיזיקה ומשחקיות במסלול ה-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) מסיר את האובייקט שפגעת בו.

challenge icon

אתגר

קל

תן למפלסת השלג משימה: לפנות את הבלוקים שמתויגים Snow.

  1. הוסף ל־Plow את void OnCollisionEnter(Collision collision), כך שיפעל רק כאשר collision.gameObject.CompareTag("Snow").
  2. בתוכו, הפעל את 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);
    }

    // שלג שהמפלסת נתקלת בו: השמידו אותו, ספרו אותו ורשמו את הספירה ביומן
}

כל השיעורים ביחידה פיזיקה ומשחקיות

תרגלו בעצמכם: Unity אונליין