Menu
CoddyTech

Oyun Bitti

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

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
  1. GameManager'a using UnityEngine.SceneManagement; ve public GameObject gameOverPanel ekle. Sahne, gizli GameOverPanel'i bağlar.
  2. BallLost içinde, son can da tükendiğinde paneli göster ve kaybedilen topu SetActive(false) ile gizle; onu paddle'a geri koyma.
  3. Oynanan sahneyi yeniden yükleyen public void PlayAgain() metodunu yaz. Panelin Play Again düğmesi bunu zaten çağırıyor.

Play'e bas, üç topu da kaybet, Play Again'e tıkla, ardından Check'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