Menu
CoddyTech

Permainan Berakhir

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

Nyawa terakhir yang hilang mengakhiri permainan. Bola keluar dari permainan, panel Game Over menutupi layar, dan tombol Play Again memulai permainan baru. Kini, panel berada dalam keadaan tersembunyi di dalam canvas HUD, dan daftar On Click tombol di Inspector sudah memanggil GameManager.PlayAgain. Daftar On Click hanya menampilkan method public, jadi method yang kamu pilih untuk tombol harus bersifat public.

Cara paling sederhana untuk memulai permainan baru adalah memuat ulang scene. Setiap object dibuat ulang dari scene: GameManager baru dengan skor 0 dan 3 nyawa, wall baru, dan bola kembali ke paddle. Scene yang sedang berjalan adalah SceneManager.GetActiveScene(), dan buildIndex-nya adalah nomor scene tersebut dalam build:

SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);

Menyembunyikan bola dengan SetActive(false) menghentikan Update()-nya, sehingga Space tidak bisa lagi meluncurkannya, dan mengeluarkannya dari simulasi fisika. Pemeriksaan dilakukan setelah lives--, jadi permainan berakhir saat lives mencapai 0: bola ketiga yang hilang jika lives dimulai dari 3.

challenge icon

Tantangan

Sedang
  1. Tambahkan using UnityEngine.SceneManagement; dan public GameObject gameOverPanel ke GameManager. Scene ini menautkan GameOverPanel yang tersembunyi.
  2. Di BallLost, saat nyawa terakhir habis, tampilkan panel dan sembunyikan bola yang hilang dengan SetActive(false), alih-alih mengembalikannya ke paddle.
  3. Tulis public void PlayAgain(), yang memuat ulang scene yang sedang dimainkan. Tombol Play Again pada panel sudah memanggilnya.

Tekan Play, kehilangan ketiga bola, klik Play Again, lalu Check.

Coba sendiri

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public Brick brickPrefab;
    public Transform wall;
    public string[] levels;
    public float spacingX = 1.75f;
    public float spacingY = 0.75f;
    public float topY = 6f;

    public Ball ball;
    public int lives = 3;
    public TMP_Text scoreText;
    public TMP_Text livesText;

    int score;
    int level;
    int bricksLeft;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        BuildLevel(0);
        ShowHud();
    }

    void BuildLevel(int index)
    {
        level = index;
        string[] rows = levels[index].Split('/');
        for (int row = 0; row < rows.Length; row++)
        {
            string line = rows[row];
            float left = -(line.Length - 1) * spacingX / 2f;
            for (int col = 0; col < line.Length; col++)
            {
                char c = line[col];
                if (c == '.') continue;
                Vector3 pos = new Vector3(left + col * spacingX, topY - row * spacingY, 0f);
                Brick brick = Instantiate(brickPrefab, pos, Quaternion.identity, wall);
                brick.SetHits(c - '0');
                bricksLeft++;
            }
        }
    }

    public void BrickBroken(Brick brick)
    {
        score += brick.points;
        bricksLeft--;
        ShowHud();
        if (bricksLeft == 0)
        {
            ball.ResetToPaddle();
            BuildLevel((level + 1) % levels.Length);
        }
    }

    public void BallLost(Ball lost)
    {
        lives--;
        ShowHud();
        lost.ResetToPaddle();
    }

    void ShowHud()
    {
        scoreText.text = "Score: " + score;
        livesText.text = "Lives: " + lives;
    }
}
quiz iconUji dirimu

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

Semua pelajaran di Game Unity: Brick Breaker