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.
Thử thách
Trung bìnhLưu thành tích tốt nhất vào best.json.
- Trong
GameManager.cs, thêm lớp[System.Serializable]BestRunvới hai biến số nguyên công khaiwavevàkills. Starttải dữ liệu từbest.jsontrongApplication.persistentDataPathbằngJsonUtility, nếu tệp tồn tại.- 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;
bestTexthiể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);
}
}
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
1Thành phần, không phải hệ thống phân cấp
Thành phần nhỏTập lệnh kẻ địch cơ sởThành phần trừu tượngCác thành phần phối hợp với nhauÔn tập: tháp pháo mô-đunÔn tập: pháo nòng đôi4Dữ liệu tuần tự hóa
Lớp có thể tuần tự hóaDanh sách trong InspectorKiểu liệt kê trong InspectorÔn tập: Bảng vật phẩm rơiÔn tập: Quay vật phẩm7Máy trạng thái
Trạng thái dưới dạng lớpTrạng thái cảnh báoMáy trạng tháiChuyển trạng tháiTrí tuệ của kẻ địchHiệp sĩ tấn côngÔn tập: trạng thái cửa10Dự án: Đấu trường sinh tồn
Anh hùngCác loại kẻ địch2Giao diện trong Unity
IDamageableGiao diện và TryGetComponentGetComponentsÔn tập: phím tương tácÔn tập: đối tượng gần nhất trong tầm với5ScriptableObjects
Tài sản dữ liệuChỉ số vũ khíCài đặt dùng chungLưu gióSóng dưới dạng dữ liệuÔn tập: Cơ sở dữ liệu vật phẩmÔn tập: Mua hàng từ cửa hàng8Code có thể tái sử dụng
Phương thức mở rộngSingleton tổng quátCác hàm hỗ trợ tổng quátÔn tập: FindNearest3Sự kiện
Sự kiện C# trong UnityĐăng ký trong OnEnableCác trường UnityEventSự kiện điều khiển UIÔn tập: Cửa sổ bật lên thành tíchÔn tập: Bộ hẹn giờ cửa sổ bật lên6Lưu dữ liệu bằng JSON
JsonUtilityLưu trò chơiTải dữ liệu và giá trị mặc địnhÔn tập: các ô lưuChọn và xóa một ô lưu9Tái sử dụng đối tượng bằng pool
Vì sao cần pool đối tượngPool dùng hàng đợiObjectPool của UnityÔn tập: pool đạnTự luyện tập: Playground Unity