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