Menu
CoddyTech

לשבור

שיעור 6 מתוך 19 בקורס Unity: משחק שובר לבנים של Coddy.

לבנים אין Rigidbody, אבל לכדור יש אחד, ו-Unity שולחת את OnCollisionEnter לשני האובייקטים בהתנגשות. לכן לבנה יכולה לזהות בעצמה את הפגיעה. בסקריפט של הלבנה, gameObject הוא הלבנה ו-collision.gameObject הוא הדבר שפגע בה.

הניקוד שייך ל-GameManager, והלבנים הן עותקים של prefab. prefab הוא נכס מחוץ לסצנה, ולכן השדות שלו לא יכולים להצביע על ה-GameManager שבסצנה דרך ה-Inspector. ה-GameManager מגדיר את GameManager.Instance הסטטי כך שיצביע על עצמו בתוך Awake(), ולכן כל סקריפט יכול לגשת אליו, גם עותקים של prefab.

אגרטל שמתנפץ כשהשחקן נתקל בו:

void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Player")) Shatter();
}

public void Shatter()
{
    Destroy(gameObject);
}

Destroy(gameObject) מסיר את האגרטל. Destroy(collision.gameObject) היה מסיר את השחקן, ואילו Destroy(this) מסיר רק את הסקריפט ומשאיר את האגרטל עומד. שמירת פעולת השבירה בשיטה ציבורית משלה מאפשרת גם לקוד אחר, כמו פצצה או שדרוג, לשבור את האגרטל.

challenge icon

אתגר

בינוני

הכדור שובר לבנים ומוסיף לניקוד את הנקודות שלהן.

  1. ב־GameManager, הוסף int score; ואת public void BrickBroken(Brick brick), שמוסיפה את brick.points לניקוד.
  2. ב־Brick, כתוב public void Hit(): GameManager.Instance.BrickBroken(this);, ואז Destroy(gameObject);
  3. ב־OnCollisionEnter של Brick, קרא ל־Hit() כשהאובייקט מתויג בתור Ball.

לחץ על "שחק" ושגר את הכדור: כל לבנה שהכדור פוגע בה נעלמת. לאחר מכן לחץ על "בדיקה".

נסו בעצמכם

using UnityEngine;

public class Brick : MonoBehaviour
{
    public int points = 10;

    // הבא: הכדור שובר לבנה ומוסיף לניקוד את הנקודות שלה.
}

כל השיעורים ביחידה Unity: משחק שובר לבנים

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