Menu
CoddyTech

Giữ lại lượt chơi tốt nhất

Thuộc phần Kiến trúc trò chơi trong Unity trong hành trình Unity của Coddy. Bài học 60 trên 64.

Arena Survivor đã hoàn thành: một Enemy trừu tượng với hai loại, IDamageable cho mọi đòn đánh, các đợt xuất hiện từ một ScriptableObject, vật phẩm nhặt được thông qua một giao diện, một HUD chỉ lắng nghe và cuối cùng là dữ liệu JSON lưu lượt chơi tốt nhất.

challenge icon

Thử thách

Trung bình

Lưu thành tích tốt nhất vào best.json.

  1. Trong GameManager.cs, thêm lớp [System.Serializable] BestRun với hai biến số nguyên công khai wave và kills.
  2. Start tải dữ liệu từ best.json trong Application.persistentDataPath bằng JsonUtility, nếu tệp tồn tại.
  3. Khi trò chơi kết thúc, nếu đạt được vòng cao hơn hoặc cùng vòng nhưng hạ được nhiều kẻ địch hơn, thành tích đó sẽ trở thành thành tích tốt nhất và được lưu lại; bestText hiển thị Best: wave 3, 12 kills.

Nhấn Chơi rồi để nhân vật gục hai lần: thành tích tốt nhất vẫn được giữ lại. Sau đó nhấn Kiểm tra.

Tự làm thử

using System.IO;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using TMPro;

public class GameManager : MonoBehaviour
{
    [SerializeField] private Hero hero;
    [SerializeField] private WaveSpawner spawner;
    [SerializeField] private GameObject gameOverPanel;
    [SerializeField] private TMP_Text resultText;
    [SerializeField] private TMP_Text bestText;
    [SerializeField] private Button restartButton;

    private int kills;

    void OnEnable()
    {
        hero.Died += GameOver;
        Enemy.Died += CountKill;
    }

    void OnDisable()
    {
        hero.Died -= GameOver;
        Enemy.Died -= CountKill;
    }

    void Start()
    {
        gameOverPanel.SetActive(false);
        restartButton.onClick.AddListener(Restart);
    }

    void CountKill(Enemy enemy)
    {
        kills++;
    }

    void GameOver()
    {
        Time.timeScale = 0f;
        int wave = spawner.Wave;
        resultText.text = "Wave " + wave + ", " + kills + " kills";
        gameOverPanel.SetActive(true);
    }

    void Restart()
    {
        Time.timeScale = 1f;
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến trúc trò chơi trong Unity

Tự luyện tập: Playground Unity