לשבור
שיעור 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) מסיר רק את הסקריפט ומשאיר את האגרטל עומד. שמירת פעולת השבירה בשיטה ציבורית משלה מאפשרת גם לקוד אחר, כמו פצצה או שדרוג, לשבור את האגרטל.
אתגר
בינוניהכדור שובר לבנים ומוסיף לניקוד את הנקודות שלהן.
- ב־
GameManager, הוסףint score;ואתpublic void BrickBroken(Brick brick), שמוסיפה אתbrick.pointsלניקוד. - ב־
Brick, כתובpublic void Hit():GameManager.Instance.BrickBroken(this);, ואזDestroy(gameObject); - ב־
OnCollisionEnterשל Brick, קרא ל־Hit()כשהאובייקט מתויג בתורBall.
לחץ על "שחק" ושגר את הכדור: כל לבנה שהכדור פוגע בה נעלמת. לאחר מכן לחץ על "בדיקה".
נסו בעצמכם
using UnityEngine;
public class Brick : MonoBehaviour
{
public int points = 10;
// הבא: הכדור שובר לבנה ומוסיף לניקוד את הנקודות שלה.
}
כל השיעורים ביחידה Unity: משחק שובר לבנים
תרגלו בעצמכם: Unity אונליין