Ayarları Kaydetme
Coddy'nin Unity Journey'sinin Gerçek Oyunlar Geliştirmek bölümünün bir parçası. Ders 25 / 56.
Bir ayar bir kez seçilir ve sonraki her oyunda aynı şekilde kalması beklenir; bu yüzden PlayerPrefs'e aittir. Oyun başladığında ayarı yükle, Ayarlar ekranında görünmesi için denetimine ata ve oyuna uygula. Oyuncu denetimi değiştirdiğinde yeni değeri uygula ve kaydet. Bu anahtar (using UnityEngine.UI;) ekrandaki zamanlayıcıyı gösterir veya gizler ve PlayerPrefs bool saklayamadığından açık için 1, kapalı için 0 saklar:
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, denetimin yeni değerini dinleyiciye iletir: Toggle için bir bool, konumu slider.value olan Slider için bir float. Koddan isOn veya value ayarlamak, denetimi oyuncunun yaptığı gibi değiştirir; dolayısıyla değer değiştiğinde dinleyicileri de çağırır. Dinleyicinin yüklemeden sonra eklenmesinin nedeni budur: önce eklenirse her başlangıçta çalışır ve yüklenen değeri hemen geri kaydeder. SetIsOnWithoutNotify ve SetValueWithoutNotify, herhangi bir dinleyiciyi çağırmadan denetimi ayarlar.
Varsayılan değer, yeni bir oyuncunun ne alacağını belirler. GetInt("ShowTimer", 1), oyuncu kapatana kadar zamanlayıcıyı gösterir; varsayılan değer 0 olsaydı, ayarları hiç açmayan herkesten gizlenirdi. Bir float ayarı da aynı şekilde yüklenir: PlayerPrefs.GetFloat(key, defaultValue): GetFloat("MouseSensitivity", 1.5f), yeni bir oyuncuya 1.5 verir.
Görev
OrtaEinstellungen-Bildschirminde 0 ile 1 arasında bir ses kaydırıcısı ve bunu yüzde olarak gösteren bir metin bulunur. Sesi Volume anahtarının altında kaydedilen bir ayar hâline getir:
- Yeni bir oyuncu 0.8 değerinde başlar; bu, Volume: 80% olarak gösterilir.
- Ses, oyundaki her sesi ölçeklendiren, 0 (sessiz) ile 1 (tam ses) arasında değer alan Unity ana ses düzeyi olan
AudioListener.volumeüzerinden oyunun tamamına uygulanır. - Oyun başladığında kaydedilen ses düzeyi uygulanır ve kaydırıcı ile metin bu değeri gösterir.
- Oyuncu kaydırıcıyı hareket ettirdiğinde yeni ses düzeyi uygulanır, metin buna göre güncellenir ve ses düzeyi kaydedilir.
ShowVolume(float volume) metni zaten yazar.
Play'e bas ve kaydırıcıyı hareket ettir; ardından Stop'a ve tekrar Play'e bas, sonra Check'e bas.
Kendin dene
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class VolumeSetting : MonoBehaviour
{
public Slider slider;
public TMP_Text volumeText;
void Start()
{
// Kaydedilmiş ses düzeyini yükle, uygula ve göster; ardından slider değişikliklerini dinle
}
void OnVolumeChanged(float value)
{
// Yeni ses düzeyini uygula, göster ve kaydet
}
void ShowVolume(float volume)
{
volumeText.text = "Volume: " + Mathf.RoundToInt(volume * 100) + "%";
}
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Gerçek Oyunlar Geliştirmek bölümündeki tüm dersler
1Ekrandaki Metinler
Canvas ve MetinSkoru GösterSayıları BiçimlendirGeri Sayım ZamanlayıcısıTekrar: Hız Göstergesi4Sahneler ve Bölümler
Bir Sahne YüklemeBölümü Yeniden BaşlatmaSonraki BölümSahneler Arasında SaklamaTekrar: Bölüm Seçimi10Proje: 3D Platform Oyunu
ParkurHareketli Platformlar2Düğmeler ve Ekranlar
Düğmeler ve onClickLambda İfadeleriInspector'da Bağlantı KurmaPanelleri Açma ve KapamaCan ÇubuklarıTekrar: Yükseltme Mağazası5PlayerPrefs ile Kaydetme
Bir Sayı KaydetmeVarsayılan Değerle YüklemeEn Yüksek SkorAyarları KaydetmeTekrar: Bankadaki Paralar