Tải với giá trị mặc định
Thuộc phần Xây dựng trò chơi thực tế trong hành trình Unity của Coddy. Bài học 23 trên 60.
Khi chưa từng lưu một khóa, giá trị đọc được là 0, nhưng 0 không phù hợp làm giá trị bắt đầu cho một số trường hợp. Trong trò chơi đua xe, người chơi chọn số đối thủ máy tham gia cuộc đua, và người chơi mới nên đua với 3 đối thủ. Mỗi lệnh Get nhận đối số thứ hai là giá trị mặc định, được trả về khi không tìm thấy khóa:
int rivals = PlayerPrefs.GetInt("Rivals", 3);
string driver = PlayerPrefs.GetString("Driver", "Rookie");Sau khi người chơi lưu 0 đối thủ để luyện tập một mình, GetInt("Rivals", 3) trả về 0: giá trị mặc định chỉ thay thế khi khóa chưa tồn tại. Vì vậy, if (rivals == 0) rivals = 3; không phải cách phù hợp để đặt giá trị mặc định. Cách này không thể phân biệt giá trị 0 đã lưu với trường hợp chưa lưu gì, và sẽ thêm lại 3 đối thủ vào mọi cuộc đua luyện tập.
PlayerPrefs.HasKey(key) cho biết khóa đã từng được lưu hay chưa, bất kể giá trị của nó, nhờ đó có thể phân biệt lần chơi đầu tiên với những lần chơi sau. Trò chơi này chào đón tay đua mới:
void Start()
{
if (!PlayerPrefs.HasKey("Driver"))
{
Debug.Log("First race! Pick a name in the garage.");
}
string driver = PlayerPrefs.GetString("Driver", "Rookie");
Debug.Log("Driver: " + driver);
}Hãy gọi HasKey trước mọi đoạn code lưu khóa: kể từ lần lưu đầu tiên, lệnh này trả về true cho đến khi khóa bị xóa bằng PlayerPrefs.DeleteKey.
Thử thách
Trung bìnhTặng người chơi mới 5 credit miễn phí và lời chào mừng.
- Trong
Start(), tải với giá trị mặc định:credits = PlayerPrefs.GetInt("Credits", 5);. - Thay
welcomeText.SetActive(false);bằngwelcomeText.SetActive(!PlayerPrefs.HasKey("Credits"));.
Nhấn Chơi và chơi một ván, sau đó nhấn Dừng rồi Chơi: lời chào mừng sẽ biến mất. Sau đó nhấn Kiểm tra.
Tự làm thử
using UnityEngine;
using TMPro;
public class ArcadeCredits : MonoBehaviour
{
public TMP_Text creditsText;
public GameObject welcomeText;
private int credits;
void Start()
{
credits = PlayerPrefs.GetInt("Credits");
welcomeText.SetActive(false);
ShowCredits();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space) && credits > 0)
{
credits--;
PlayerPrefs.SetInt("Credits", credits);
PlayerPrefs.Save();
ShowCredits();
}
}
void ShowCredits()
{
creditsText.text = "Credits: " + credits;
}
}
Tất cả bài học trong Xây dựng trò chơi thực tế
1Văn bản trên màn hình
Canvas và văn bảnHiển thị điểm sốĐịnh dạng sốĐồng hồ đếm ngượcÔn tập: Đồng hồ tốc độ7Điều khiển thời gian
Tạm dừng bằng timeScaleChuyển động chậmThời gian không bị co giãnÔn tập: Bullet Time2Nút bấm và màn hình
Nút bấm và onClickLambdaKết nối trong InspectorBật và tắt bảngThanh máuÔn tập: Cửa hàng nâng cấp5Lưu dữ liệu với PlayerPrefs
Lưu một sốTải với giá trị mặc địnhĐiểm cao nhấtLưu cài đặtÔn tập: Tiền xu trong ngân hàngTự luyện tập: Playground Unity