Menu
CoddyTech

קוליידרים מסוג Trigger

חלק מהיחידה פיזיקה ומשחקיות במסלול ה-Unity של Coddy. שיעור 15 מתוך 71.

מתנגש שסומנה בו האפשרות Is Trigger אינו מוצק עוד: גופים קשיחים עוברים דרכו, ו-Unity מדווחת על החפיפה במקום זאת, באמצעות קריאה ל-OnTriggerEnter בסקריפטים של שני האובייקטים. קווי סיום, פריטי איסוף ואזורי סכנה הם טריגרים. בקוד, תיבת הסימון היא המאפיין isTrigger של המתנגש.

אזור האזעקה בכספת הזו משנה את המתנגש שלו לטריגר כשהמשחק מתחיל, כלומר מסמן את תיבת הסימון, ומפעיל את האזעקה כששומר נכנס:

void Start()
{
    GetComponent<Collider>().isTrigger = true;
}

void OnTriggerEnter(Collider other)
{
    Debug.Log("Alarm!");
}

טריגרים פועלים לפי אותו כלל כמו התנגשויות: Unity בודקת זוג רק כאשר לפחות לאחד משני האובייקטים יש גוף קשיח. שני אובייקטים ללא גוף קשיח לעולם אינם מדווחים זה על זה, בין אם מדובר בטריגר ובין אם לא. השומרים מבצעים סיור באמצעות סקריפט, לכן לכל שומר יש גוף קשיח קינמטי (Add Component, Rigidbody, האפשרות Is Kinematic מסומנת): כוח הכבידה ודחיפות אינם משפיעים עליו, והוא עדיין נחשב לגוף קשיח. ללא הגופים הקשיחים של השומרים, שומר עובר דרך האזור והמסוף נשאר ריק. ללא isTrigger, האזור הוא תיבה מוצקה, וגוף קינמטי לעולם אינו נוגע במתנגש שאין לו גוף קשיח, ולכן שוב לא נרשם דבר. מספיק גוף קשיח אחד בזוג, בכל אחד מהאובייקטים. בשיעור הבא נבחן את other, המתנגש שנכנס.

challenge icon

אתגר

קל

הטס את הרחפן דרך הטבעות, ותן לכל טבעת לדווח עליו.

  1. ב־Start() של Drone.cs, הגדר body = gameObject.AddComponent<Rigidbody>(); וגם body.isKinematic = true;, כדי שהוא יטוס בגובה קבוע.
  2. ב־Start() של Ring.cs, הגדר GetComponent<Collider>().isTrigger = true;.

לחץ על "שחק": הרחפן טס דרך הטבעות, וב־Console מופיעות ההודעות Ring1 passed, Ring2 passed ו־Ring3 passed. לאחר מכן לחץ על "בדיקה".

נסו בעצמכם

using UnityEngine;

public class Ring : MonoBehaviour
{
    void Start()
    {
        // הפוך את ה-collider של הטבעת הזו ל-trigger
    }

    void OnTriggerEnter(Collider other)
    {
        Debug.Log(name + " passed");
    }
}

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

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