Kendine Göre Uyarla
Coddy'nin Unity Oyunu: Tuğla Kırma kursunda ders 16 / 16.
Son özellik, oyunlar arasında kalıcı olan en yüksek skordur. PlayerPrefs, oyuncunun cihazında küçük değerleri saklar: PlayerPrefs.GetInt(key, 0) bir değeri okur; henüz kayıtlı bir şey yoksa 0 değerini döndürür ve PlayerPrefs.SetInt(key, value) bir değer kaydeder. Oyun başladığında en yüksek skoru yükle ve oyun daha yüksek bir skorla bittiğinde kaydet. Tekrar Oyna sahneyi yeniden yükler ve yeni GameManager en yüksek skoru tekrar yükler.
Artık oyunu dilediğin gibi ayarlayabilirsin. Oyunun nasıl oynandığını belirleyen her sayı, kodda başlangıç değeri olan bir alandır:
Ball:speed(9) veminVertical(0.3).Paddle:speed(14),wideFactor(1.6) vewideSeconds(8).GameManager:lives(3),dropChance(0.15) ve tuğlalar arasındaki boşluk.
Düzenler, Inspector'daki GameManager'ın levels listesindedir: bir rakam, o kadar vuruşta kırılan bir tuğlayı; bir nokta, bir boşluğu; / ise sonraki satırın başlangıcını belirtir. Örneğin 1.3.1/22222. Kendi Unity projenizde değerleri Inspector'dan değiştirin: bir betik bir nesneye eklendiğinde Inspector kendi kopyasını saklar ve koddaki yeni bir başlangıç değeri artık bu kopyaya aktarılmaz.
Görev
ZorGameManageriçindepublic TMP_Text bestTextekle (sahne BestText'i bağlar) ve birint bestekle.Start()içindebestdeğerini PlayerPrefs'tenBestScoreanahtarıyla yükle; kayıtlı bir değer yoksa 0 kullan.ShowHud()dabestTextiçinde en iyi skoru göstererekBest: 0değerini gösterir.- Oyun
bestdeğerinden yüksek bir skorla bittiğinde, skorubestiçine kaydet,BestScoreanahtarıyla sakla ve göster.
Ardından oyunu kendine göre düzenle: hızları, can sayısını, düşme şansını ve güçlendiricilerin etkisini değiştir, doğru hissettirene kadar oyna.
Play'e bas, en iyi skoru belirle, sonra Check'e 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.