Menu
CoddyTech

לאבד כדור

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

כדור שעובר את המחבט אובד. מתחת למחבט יש עכשיו בסצנה DeathZone: אובייקט עם מתנגש תיבה שמוגדר כ-Is Trigger ועם התג DeathZone. טריגר לא עוצר דבר; הוא שולח OnTriggerEnter(Collider other) כשמשהו עם Rigidbody נכנס אליו. הכדור מדווח על האובדן ל-GameManager, שמנהל את מספר החיים ומחליט מה יקרה בהמשך.

גולה שנופלת למים מתחילה מחדש בנקודת ההופעה שלה:

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Water")) Respawn();
}

void Respawn()
{
    rb.linearVelocity = Vector3.zero;
    transform.position = spawnPoint.position;
}

הכדור צריך פחות מהגולה. ה-Update() שלו כבר מצמיד אותו למחבט בכל פריים כל עוד launched הוא false, ולכן באיפוס צריך רק לנקות את הדגל הזה ולעצור את הכדור: בפריים הבא הוא חוזר אליו, ו-Space משגר אותו שוב.

challenge icon

אתגר

בינוני
  1. ב־Ball, כתבו את public void ResetToPaddle(): הכדור כבר לא משוגר ומפסיק לנוע.
  2. הוסיפו את OnTriggerEnter ל־Ball: כשהוא נכנס לאובייקט שמתויג ב־DeathZone, קראו ל־GameManager.Instance.BallLost(this).
  3. ב־GameManager, הוסיפו את public int lives = 3 ואת public void BallLost(Ball lost): מורידים חיים אחד, והכדור שאבד חוזר אל המחבט.

עדיין אין סוף משחק, לכן מספר החיים יכול לרדת מתחת ל־0 לעת עתה.

לחצו על Play, החטיאו את הכדור בכוונה, שגרו אותו שוב, ואז לחצו על Check.

נסו בעצמכם

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public Brick brickPrefab;
    public Transform wall;
    public int rows = 5;
    public int columns = 9;
    public float spacingX = 1.75f;
    public float spacingY = 0.75f;
    public float topY = 6f;
    public int[] rowHits = { 2, 1, 1, 1, 1 };

    int score;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        BuildWall();
    }

    void BuildWall()
    {
        float left = -(columns - 1) * spacingX / 2f;
        for (int row = 0; row < rows; row++)
        {
            for (int col = 0; col < columns; col++)
            {
                Vector3 pos = new Vector3(left + col * spacingX, topY - row * spacingY, 0f);
                Brick brick = Instantiate(brickPrefab, pos, Quaternion.identity, wall);
                brick.SetHits(rowHits[row]);
            }
        }
    }

    public void BrickBroken(Brick brick)
    {
        score += brick.points;
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

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