Menu
CoddyTech

Sonraki Seviye

Coddy'nin Unity Oyunu: Tuğla Kırma kursunda ders 12 / 19.

Son tuğla kırıldığında seviye tamamlanır. Sayım: oluşturulan her tuğla için bir ekle, kırılan her tuğla için bir çıkar ve sayı 0 olduğunda seviye tamamlanır.

O anda sahnede hâlâ bulunan tuğlaları saymak işe yaramaz: Destroy kare sonuna kadar bekler, bu yüzden kırılmakta olan tuğla hâlâ oradadır.

Son seviyeden sonra tekrar ilk seviyeye dönülür. Bölme işleminin kalanı, sayıyı başa sarar:

int next = (2 + 1) % 3;   // 0: 3 seviyenin 2 indeksinden sonra tekrar 0'a dön

Yeni duvar uçan bir topun altında başlamasın diye top önce palete geri döner.

challenge icon

Görev

Orta

Tuğlaları temizleyince sonraki bölüm oluşturulur.

  1. GameManager içinde public Ball ball; (sahnedeki bağlantı bunu atar) ve int bricksLeft; ekle; BuildLevel oluşturduğu her tuğla için bu değeri bir artırır.
  2. BrickBroken, bricksLeft değerini bir azaltır. Değer 0 olduğunda ball.ResetToPaddle(); ve BuildLevel((level + 1) % levels.Length); çağır.

“Oyna” düğmesine bas ve bir bölümü temizle: top raketin üzerinde bekler ve yeni bir duvar belirir. Ardından “Kontrol et” düğmesine bas.

Kendin dene

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 int lives = 3;
    public TMP_Text scoreText;
    public TMP_Text livesText;

    int score;
    int level;

    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');
            }
        }
    }

    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;
    }
}

Unity Oyunu: Tuğla Kırma bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground