Menu
CoddyTech

Lưu cài đặt

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

Một cài đặt được chọn một lần và cần được giữ lại trong mọi lần chơi sau, nên hãy lưu cài đặt đó vào PlayerPrefs. Khi trò chơi bắt đầu, hãy tải cài đặt, gán cài đặt đó cho điều khiển để màn hình Settings hiển thị giá trị, rồi áp dụng giá trị đó vào trò chơi. Khi người chơi thay đổi điều khiển, hãy áp dụng giá trị mới và lưu lại. Công tắc này (using UnityEngine.UI;) bật hoặc tắt bộ hẹn giờ trên màn hình. Vì PlayerPrefs không có kiểu bool, công tắc lưu 1 khi bật và 0 khi tắt:

public Toggle timerToggle;
public GameObject timerText;

void Start()
{
    bool show = PlayerPrefs.GetInt("ShowTimer", 1) == 1;
    timerToggle.isOn = show;
    timerText.SetActive(show);
    timerToggle.onValueChanged.AddListener(OnTimerToggled);
}

void OnTimerToggled(bool on)
{
    timerText.SetActive(on);
    PlayerPrefs.SetInt("ShowTimer", on ? 1 : 0);
    PlayerPrefs.Save();
}

onValueChanged truyền giá trị mới của điều khiển cho hàm lắng nghe: một bool đối với Toggle, một float đối với Slider, có vị trí là slider.value. Gán isOn hoặc value trong code sẽ thay đổi điều khiển giống như khi người chơi thao tác, nên mỗi lần giá trị thay đổi, hàm lắng nghe cũng được gọi. Vì vậy, hãy thêm hàm lắng nghe sau khi tải giá trị: nếu thêm trước, hàm sẽ chạy mỗi khi trò chơi bắt đầu và lưu ngay giá trị vừa tải. SetIsOnWithoutNotify và SetValueWithoutNotify đặt giá trị cho điều khiển mà không gọi hàm lắng nghe nào.

Giá trị mặc định quyết định người chơi mới sẽ nhận được gì. GetInt("ShowTimer", 1) sẽ hiển thị bộ hẹn giờ cho đến khi người chơi tắt nó; nếu giá trị mặc định là 0, bộ hẹn giờ sẽ bị ẩn với tất cả những ai chưa từng mở phần cài đặt. Cài đặt số thực được tải theo cách tương tự bằng PlayerPrefs.GetFloat(key, defaultValue): GetFloat("MouseSensitivity", 1.5f) cho người chơi mới giá trị 1.5. Cài đặt âm lượng được gán cho AudioListener.volume, âm lượng tổng của Unity từ 0 (im lặng) đến 1 (tối đa), giúp điều chỉnh âm lượng của mọi âm thanh trong trò chơi.

challenge icon

Thử thách

Trung bình

Lưu thanh trượt âm lượng dưới khóa Volume.

  1. Trong Start(), tải PlayerPrefs.GetFloat("Volume", 0.8f), gán giá trị đó cho slider.value và AudioListener.volume, rồi gọi ShowVolume.
  2. Sau đó, thêm slider.onValueChanged.AddListener(OnVolumeChanged);.
  3. Trong OnVolumeChanged, gán value cho AudioListener.volume, hiển thị giá trị đó, rồi lưu bằng PlayerPrefs.SetFloat và PlayerPrefs.Save().

Nhấn Chơi rồi di chuyển thanh trượt, sau đó nhấn Dừng rồi Chơi: thanh trượt vẫn ở vị trí bạn đã đặt. Sau đó, nhấn Kiểm tra.

Tự làm thử

using UnityEngine;
using UnityEngine.UI;
using TMPro;

public class VolumeSetting : MonoBehaviour
{
    public Slider slider;
    public TMP_Text volumeText;

    void Start()
    {
        // Tải mức âm lượng đã lưu, áp dụng và hiển thị mức đó, rồi theo dõi thanh trượt
    }

    void OnVolumeChanged(float value)
    {
        // Áp dụng, hiển thị và lưu mức âm lượng mới
    }

    void ShowVolume(float volume)
    {
        volumeText.text = "Volume: " + Mathf.RoundToInt(volume * 100) + "%";
    }
}

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