Menu
CoddyTech

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.

challenge icon

Thử thách

Trung bình

Tặng người chơi mới 5 credit miễn phí và lời chào mừng.

  1. Trong Start(), tải với giá trị mặc định: credits = PlayerPrefs.GetInt("Credits", 5);.
  2. Thay welcomeText.SetActive(false); bằng welcomeText.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ế

Tự luyện tập: Playground Unity