Menu
CoddyTech

Oyun Bitti

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

Kaybedilen son can oyunu bitirir. Top oyundan çıkar, bir Oyun Bitti paneli ekranı kaplar ve paneldeki Yeniden Oyna düğmesi yeni bir oyun başlatır. Sahnedeki panel artık HUD kanvasının içinde gizlidir ve Denetleyici'deki düğmenin Tıklanınca listesi zaten GameManager.PlayAgain metodunu çağırır. Tıklanınca listesinde yalnızca public metotlar bulunur; bu nedenle bir düğme için seçtiğin metodun public olması gerekir.

Yeni bir oyun başlatmanın en basit yolu sahneyi yeniden yüklemektir. Tüm nesneler sahneden yeniden oluşturulur: skoru 0 ve 3 canı olan yeni bir GameManager, yeni bir duvar ve raketin üzerindeki top. Oynatılan sahne SceneManager.GetActiveScene() şeklindedir ve buildIndex bu sahnenin derlemedeki numarasıdır:

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

Topu SetActive(false) ile gizlemek, Update() metodunun çalışmasını durdurur; böylece Space artık topu fırlatamaz ve top fizik sisteminden çıkarılır. Kontrol lives-- işleminden sonra yapıldığından, can sayısı 0'a ulaştığında oyun biter: can sayısı 3'ten başladığında üçüncü topun kaybedilmesiyle.

challenge icon

Görev

Orta

Son canı kaybetmek oyunu bitirir ve Yeniden Oyna baştan başlatır.

  1. GameManager içinde using UnityEngine.SceneManagement; ve public GameObject gameOverPanel; ekle.
  2. BallLost içinde, lives == 0 olduğunda paneli göster ve topu lost.gameObject.SetActive(false) ile gizle; aksi hâlde topu önceki gibi sıfırla.
  3. public void PlayAgain() yaz: SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);

“Oyna” düğmesine bas, üç topu kaybet ve Yeniden Oyna'ya tıkla: yeni bir oyun başlar. Ardından “Kontrol et”'e 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 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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

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

Kendi başına pratik yap: Unity playground