Menu
CoddyTech

Kendine Göre Uyarla

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

Son özellik, oyunlar arasında korunan en iyi puandır. PlayerPrefs, oyuncunun cihazında küçük değerleri saklar: PlayerPrefs.GetInt(key, 0) bir değer okur; henüz hiçbir şey kaydedilmemişse 0 döndürür ve PlayerPrefs.SetInt(key, value) bir değer kaydeder. Tekrar Oyna sahneyi yeniden yükler ve yeni GameManager en iyi puanı yeniden yükler.

Artık oyunu istediğin gibi ayarlayabilirsin. Oyunun nasıl oynandığını belirleyen her sayı, kodda başlangıç değeri olan bir alandır ve oyuncunun Inspector'ı salt okunurdur; bu nedenle değerleri orada değiştir:

  • Ball: speed (9) ve minVertical (0.3).
  • Paddle: speed (14), wideFactor (1.6) ve wideSeconds (8).
  • GameManager: lives (3) ve dropChance (0.15).
challenge icon

Görev

Zor

Oyunlar arasında en iyi skoru koru, ardından oyunu ayarla.

  1. GameManager içinde public TMP_Text bestText; ve int best; ekle; Start() şu kodla başlar: best = PlayerPrefs.GetInt("BestScore", 0);
  2. ShowHud() ayrıca bestText.text = "Best: " + best; değerini ayarlar.
  3. Son can score > best koşuluyla bittiğinde best değerini ayarla, PlayerPrefs.SetInt("BestScore", best); kodunu çalıştır ve ShowHud() çağır.
  4. Hızları, can sayısını ve dropChance değerini kodda tanımlandıkları yerde ayarla.

“Oyna” düğmesine bas ve bir en iyi skor belirle: bu skor, Tekrar Oyna'dan sonra da korunur. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
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;
    public GameObject gameOverPanel;
    public GameObject[] powerUps;
    public float dropChance = 0.15f;

    int score;
    int level;
    int bricksLeft;
    List<Ball> balls = new List<Ball>();

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        balls.Add(ball);
        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 (Random.value < dropChance)
        {
            GameObject prefab = powerUps[Random.Range(0, powerUps.Length)];
            Instantiate(prefab, brick.transform.position, Quaternion.identity);
        }
        if (bricksLeft == 0)
        {
            balls[0].ResetToPaddle();
            BuildLevel((level + 1) % levels.Length);
        }
    }

    public void BallLost(Ball lost)
    {
        if (balls.Count > 1)
        {
            balls.Remove(lost);
            Destroy(lost.gameObject);
            return;
        }
        lives--;
        ShowHud();
        if (lives == 0)
        {
            gameOverPanel.SetActive(true);
            lost.gameObject.SetActive(false);
        }
        else lost.ResetToPaddle();
    }

    public void SplitBall()
    {
        Ball source = balls[0];
        Ball left = Instantiate(source, source.transform.position, Quaternion.identity);
        left.Launch(new Vector3(-0.6f, 1f, 0f));
        balls.Add(left);
        Ball right = Instantiate(source, source.transform.position, Quaternion.identity);
        right.Launch(new Vector3(0.6f, 1f, 0f));
        balls.Add(right);
    }

    public void PlayAgain()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }

    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