Menu
CoddyTech

חיים ונזק

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

כדי לגרום נזק דרושים שני סקריפטים. סקריפט Health נמצא על כל מה שעלול להיפגע ומנהל את נקודות החיים שלו, ומה שגורם לפגיעה מוצא את הסקריפט הזה וקורא למתודה בו. הנה סקריפט Health של ארגז שנשבר אחרי שלוש פגיעות, וסקריפט של דוקרנים שפוגעים בכל מה שנוחת עליהם:

public class Health : MonoBehaviour
{
    [SerializeField] private int hp = 3;

    public void TakeDamage(int amount)
    {
        hp -= amount;
        if (hp <= 0)
        {
            Destroy(gameObject);
        }
    }
}
public class Spikes : MonoBehaviour
{
    void OnCollisionEnter(Collision collision)
    {
        Health health = collision.gameObject.GetComponent<Health>();
        if (health != null)
        {
            health.TakeDamage(1);
        }
    }
}

TakeDamage היא public, ולכן סקריפטים אחרים יכולים לקרוא לה, והיא הקוד היחיד שמשנה את hp. דוקרנים, קליעים ולבה קוראים כולם לאותה מתודה, ורק סקריפט Health קובע מה המשמעות של 0: להשמיד את הארגז, לסיים את המשחק או להפעיל אנימציית מוות. כל סקריפט נמצא בקובץ משלו, ששמו כשם המחלקה שלו.

GetComponent<Health>() מחזירה null עבור דברים שאין להם Health, כמו הרצפה, ולכן הדוקרנים בודקים לפני שהם קוראים לה. TryGetComponent(out Health health) מבצעת את החיפוש ואת הבדיקה בקריאה אחת: היא מחזירה true וממלאת את health רק כשיש רכיב כזה.

challenge icon

אתגר

בינוני

ודאו שכל פגיעה תיחשב. Bullet מוכן וקורא ל־TakeDamage(2) עבור מה שהוא פוגע בו.

  1. ב־Health, השלימו את TakeDamage(int amount): הפחיתו מ־hp את Mathf.Max(amount - armor, 1).
  2. תעדו את name + " hp: " + hp, למשל Dummy hp: 2.
  3. כאשר hp <= 0, קראו ל־Destroy(gameObject);.

לחצו על „שחק“ וירו בבובת האימון פעמיים: המערכת מתעדת Dummy hp: 2, ואז היא נעלמת. לאחר מכן לחצו על „בדיקה“.

נסו בעצמכם

using UnityEngine;

public class Health : MonoBehaviour
{
    [SerializeField] private int hp = 4;
    [SerializeField] private int armor = 0;

    public void TakeDamage(int amount)
    {
        // הפחת amount פחות armor (לפחות 1), רשום בלוג כמה נשאר, והשמד כשמגיע ל־0
    }
}

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

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