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.
Tantangan
Sedang- Tambahkan
using UnityEngine.SceneManagement;danpublic GameObject gameOverPanelkeGameManager. Scene ini menautkan GameOverPanel yang tersembunyi. - Di
BallLost, saat nyawa terakhir habis, tampilkan panel dan sembunyikan bola yang hilang denganSetActive(false), alih-alih mengembalikannya ke paddle. - 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;
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.