Jadikan Milikmu
Pelajaran 16 dari 16 dalam kursus Game Unity: Brick Breaker di Coddy.
Fitur terakhir adalah skor terbaik yang tetap tersimpan di antara permainan. PlayerPrefs menyimpan nilai kecil di perangkat pemain: PlayerPrefs.GetInt(key, 0) membaca nilai, dengan nilai 0 jika belum ada yang disimpan, dan PlayerPrefs.SetInt(key, value) menyimpan nilai. Muat skor terbaik saat permainan dimulai, lalu simpan saat permainan berakhir dengan skor yang lebih tinggi. Main Lagi memuat ulang scene, lalu GameManager baru memuat skor terbaik lagi.
Setelah itu, kamu bisa mengatur permainan sesuai keinginanmu. Setiap angka yang menentukan cara permainan berjalan adalah field dengan nilai awal di dalam kode:
Ball:speed(9) danminVertical(0.3).Paddle:speed(14),wideFactor(1.6), danwideSeconds(8).GameManager:lives(3),dropChance(0.15), dan jarak antarbrick.
Susunan level adalah list levels milik GameManager di Inspector: digit menandakan brick dengan jumlah hit sebanyak digit tersebut, titik menandakan celah, dan / memulai baris berikutnya, seperti 1.3.1/22222. Di proyek Unity-mu sendiri, ubah nilai di Inspector: setelah script dipasang pada object, Inspector menyimpan salinannya sendiri, dan nilai awal baru dalam kode tidak akan diterapkan padanya.
Tantangan
Sulit- Di
GameManager, tambahkanpublic TMP_Text bestText(scene menghubungkan BestText) danint best. DiStart(), muatbestdari PlayerPrefs dengan keyBestScore, dan gunakan 0 jika belum ada yang disimpan.ShowHud()juga menampilkanBest: 0dibestText, dengan nilai terbaik. - Saat permainan berakhir dengan skor yang lebih tinggi daripada
best, simpan skor tersebut dibest, simpan dengan keyBestScore, lalu tampilkan.
Lalu buat game ini sesuai keinginanmu: ubah kecepatannya, jumlah nyawa, peluang item jatuh, dan kekuatan power-up, lalu mainkan sampai terasa pas.
Tekan Play, buat skor terbaik, lalu tekan Periksa.
Coba sendiri
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;
}
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.