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.
Thử thách
Trung bìnhLưu thanh trượt âm lượng dưới khóa Volume.
- Trong
Start(), tảiPlayerPrefs.GetFloat("Volume", 0.8f), gán giá trị đó choslider.valuevàAudioListener.volume, rồi gọiShowVolume. - Sau đó, thêm
slider.onValueChanged.AddListener(OnVolumeChanged);. - Trong
OnVolumeChanged, gánvaluechoAudioListener.volume, hiển thị giá trị đó, rồi lưu bằngPlayerPrefs.SetFloatvà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ế
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