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) veminVertical(0.3).Paddle:speed(14),wideFactor(1.6) vewideSeconds(8).GameManager:lives(3) vedropChance(0.15).
Görev
ZorOyunlar arasında en iyi skoru koru, ardından oyunu ayarla.
GameManageriçindepublic TMP_Text bestText;veint best;ekle; Start() şu kodla başlar:best = PlayerPrefs.GetInt("BestScore", 0);- ShowHud() ayrıca
bestText.text = "Best: " + best;değerini ayarlar. - Son can
score > bestkoşuluyla bittiğinde best değerini ayarla,PlayerPrefs.SetInt("BestScore", best);kodunu çalıştır ve ShowHud() çağır. - 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;
}
}
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