Menu
CoddyTech

Lưu một số

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 22 trên 60.

Mỗi trường bắt đầu bằng giá trị mặc định khi trò chơi khởi động. Người chơi thu thập 40 viên ngọc, thoát trò chơi rồi quay lại vào ngày mai sẽ thấy số ngọc là 0, vì thoát trò chơi sẽ kết thúc trò chơi và mọi thứ trong đó. PlayerPrefs lưu các giá trị nhỏ trên thiết bị của người chơi giữa các lần chơi. Mỗi giá trị được lưu dưới một khóa, tức là một chuỗi bạn tự chọn, bằng SetInt, SetFloat hoặc SetString:

PlayerPrefs.SetString("PlayerName", "Robin");
PlayerPrefs.SetInt("LevelReached", 4);
PlayerPrefs.SetFloat("HoursPlayed", 2.5f);
PlayerPrefs.Save();

Để đọc lại một giá trị, hãy gọi hàm Get có cùng kiểu và cùng khóa. Nếu khóa chưa từng được lưu, giá trị đọc được sẽ là 0, 0 hoặc chuỗi rỗng, vì vậy trong lần chơi đầu tiên của người chơi, lời chào này sẽ hiển thị tên trống và cấp độ 0:

void Start()
{
    string player = PlayerPrefs.GetString("PlayerName");
    int level = PlayerPrefs.GetInt("LevelReached");
    Debug.Log(player + " is on level " + level);
}

Khóa phân biệt chữ hoa chữ thường: GetInt("levelreached") đọc một khóa chưa từng được lưu và trả về 0. Mỗi khóa chỉ chứa một kiểu dữ liệu, vì vậy hãy đọc khóa bằng hàm Get tương ứng với hàm Set đã dùng. Hãy lưu giá trị khi nó thay đổi, không chỉ khi trò chơi kết thúc. Unity ghi PlayerPrefs vào đĩa khi trò chơi thoát bình thường, còn PlayerPrefs.Save() ghi chúng ngay lập tức, vì vậy sự cố không thể làm mất chúng. Trường static cũng không giải quyết được việc này: trường chỉ tồn tại trong lúc trò chơi đang chạy, và khi thoát thì trò chơi cũng kết thúc.

challenge icon

Thử thách

Trung bình

Biến số lần nhảy thành tổng số lần nhảy trong suốt quá trình chơi, được lưu lại giữa các ván.

  1. Trong Update(), sau jumps++;, thêm PlayerPrefs.SetInt("TotalJumps", jumps); và PlayerPrefs.Save();.
  2. Trong Start(), phía trên ShowJumps();, tải giá trị này: jumps = PlayerPrefs.GetInt("TotalJumps");.

Nhấn Chơi rồi nhảy, sau đó nhấn Dừng và Chơi lại: số lần nhảy sẽ tiếp tục được cộng dồn. Sau đó nhấn Kiểm tra.

Tự làm thử

using UnityEngine;
using TMPro;

public class JumpCounter : MonoBehaviour
{
    public TMP_Text jumpsText;
    public float hop = 5f;
    private Rigidbody rb;
    private int jumps;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        ShowJumps();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            rb.linearVelocity = Vector3.up * hop;
            jumps++;
            ShowJumps();
        }
    }

    void ShowJumps()
    {
        jumpsText.text = "Jumps: " + jumps;
    }
}

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