Level Selesai
Pelajaran 11 dari 16 dalam kursus Game Unity: Brick Breaker di Coddy.
Game dengan beberapa level memerlukan cara untuk menuliskan level-level tersebut. Teks adalah cara termudah: satu karakter untuk setiap batu bata, satu string untuk setiap baris. Dalam game ini, digit adalah batu bata dengan jumlah pukulan sesuai nilainya dan titik adalah celah. Baris-baris suatu level disimpan dalam satu string, dipisahkan dengan /, sehingga satu level muat dalam satu baris di Inspector. Split('/') memotong string menjadi array baris. Sebuah taman yang ditanam dari teks:
string layout = "t.t.t/.ttt.";
string[] rows = layout.Split('/');
for (int row = 0; row < rows.Length; row++)
for (int col = 0; col < rows[row].Length; col++)
if (rows[row][col] == 't') Instantiate(treePrefab, new Vector3(col, 0f, -row), Quaternion.identity);Karakter digit bukanlah angkanya: '3' adalah char dengan kode 51. Kode sepuluh digit berurutan, jadi dengan mengurangi '0' (kode 48), kamu mendapatkan angkanya: '3' - '0' adalah int 3.
Level selesai ketika batu bata terakhirnya hancur. Hitung jumlahnya: tambahkan satu untuk setiap batu bata yang dibuat, kurangi satu untuk setiap batu bata yang hancur, dan saat jumlahnya 0, level selesai. Menghitung batu bata yang masih ada di scene tidak akan berhasil pada saat itu, karena Destroy menunggu hingga akhir frame, sehingga batu bata yang sedang hancur masih ada di sana.
Tantangan
SedangBuat batu bata dari teks. Scene mengisi levels dengan tiga tata letak; yang pertama adalah dinding yang kamu miliki sekarang.
- Di
GameManager, hapusrows,columns, danrowHits. Tambahkanpublic string[] levels,public Ball ball(scene menghubungkan Ball), sebuahint level, dan sebuahint bricksLeft. - Ganti
BuildWall()denganvoid BuildLevel(int index): fungsi ini menyimpanindexdileveldan memisahkanlevels[index]menjadi baris pada/. Untuk setiap digitc, fungsi ini membuat batu bata denganc - '0'hit dan menambahkan satu kebricksLeft; titik tetap kosong. Baris-barisnya tetap berpusat dan berjarak seperti sebelumnya.Start()memanggilBuildLevel(0). - Di
BrickBroken, kurangibricksLeftsatu. Saat nilainya 0, kembalikan bola ke paddle dan buat level berikutnya; setelah level terakhir, kembali ke level pertama.
Tekan Play dan selesaikan satu level jika kamu bisa, lalu tekan Check.
Coba sendiri
using UnityEngine;
using TMPro;
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 };
public int lives = 3;
public TMP_Text scoreText;
public TMP_Text livesText;
int score;
void Awake()
{
Instance = this;
}
void Start()
{
BuildWall();
ShowHud();
}
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;
ShowHud();
}
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.