Menu
CoddyTech

Kehilangan Bola

Pelajaran 8 dari 16 dalam kursus Game Unity: Brick Breaker di Coddy.

Bola yang melewati paddle akan hilang. Di bawah paddle, scene kini memiliki DeathZone: sebuah object dengan box collider yang disetel ke Is Trigger dan tag DeathZone. Trigger tidak menghentikan apa pun; trigger mengirim OnTriggerEnter(Collider other) saat sesuatu dengan Rigidbody memasukinya. Bola melaporkan kehilangan itu kepada GameManager, yang mengelola nyawa dan menentukan apa yang terjadi selanjutnya.

Kelereng yang jatuh ke air akan kembali ke titik spawn-nya:

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

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

Bola membutuhkan lebih sedikit daripada kelereng. Update()-nya sudah menempatkan bola di paddle setiap frame selama launched bernilai false, jadi reset hanya perlu menghapus flag itu dan menghentikan bola: frame berikutnya akan membawanya kembali, lalu Space meluncurkannya lagi.

challenge icon

Tantangan

Sedang
  1. Di Ball, tulis public void ResetToPaddle(): bola tidak lagi diluncurkan dan berhenti bergerak.
  2. Tambahkan OnTriggerEnter ke Ball: saat bola memasuki object yang diberi tag DeathZone, panggil GameManager.Instance.BallLost(this).
  3. Di GameManager, tambahkan public int lives = 3 dan public void BallLost(Ball lost): nyawa berkurang satu, dan bola yang hilang kembali ke paddle.

Game over belum ada, jadi untuk sekarang jumlah nyawa bisa turun hingga di bawah 0.

Tekan Play, sengaja biarkan bola terlewat, luncurkan lagi, lalu tekan Check.

Coba sendiri

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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Game Unity: Brick Breaker