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.
Görev
OrtaGameManager'ausing UnityEngine.SceneManagement;vepublic GameObject gameOverPanelekle. Sahne, gizli GameOverPanel'i bağlar.BallLostiçinde, son can da tükendiğinde paneli göster ve kaybedilen topuSetActive(false)ile gizle; onu paddle'a geri koyma.- 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;
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.