Menu
CoddyTech

Skor ve Canlar

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

Puan ve canlar ekranda yer almalı. Sahnede artık üst kısımda ScoreText ve LivesText adlı iki TextMeshPro metni içeren bir Canvas var ve GameManager bunları TMPro ad alanından gelen TMP_Text alanlarında tutuyor.

Sayılar GameManager'ın alanlarında bulunur ve metinler yalnızca bunları gösterir. Bir yöntem her iki metni de alanlardaki değerlerden yeniden yazar ve bir sayıyı değiştiren her yöntem bu yöntemi çağırır; Start() da çağırır, böylece ilk kare gerçek değerleri gösterir. Bir dükkânın bozuk para sayacı:

public TMP_Text coinsText;
int coins;

public void AddCoins(int amount)
{
    coins += amount;
    ShowCoins();
}

void ShowCoins()
{
    coinsText.text = "Coins: " + coins;
}

Metin yalnızca sayı değiştiğinde değişir. Her Update() içinde yeniden yazmak aynı görünürdü, ancak boş yere her karede yeni bir dize oluşturur.

challenge icon

Görev

Orta

Puanı ve canları ekranda göster.

  1. GameManager içinde using TMPro;, public TMP_Text scoreText; ve public TMP_Text livesText; ekle.
  2. void ShowHud() yaz: scoreText.text = "Score: " + score; ve livesText.text = "Lives: " + lives;
  3. ShowHud() işlevini Start'ın sonunda, BrickBroken ve BallLost içinde çağır.

“Oyna” düğmesine bas: Score: 0 ve Lives: 3 görünür ve oynadıkça değişir. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using UnityEngine;

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;

    int score;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        BuildWall();
    }

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

    public void BallLost(Ball lost)
    {
        lives--;
        lost.ResetToPaddle();
    }
}

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

Kendi başına pratik yap: Unity playground