Enregistrer les paramètres
Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 25 sur 60.
Un paramètre est choisi une fois et doit être retrouvé dans chaque partie suivante : il a donc sa place dans PlayerPrefs. Au démarrage du jeu, charge le paramètre, applique-le à son contrôle pour qu’il s’affiche dans l’écran des paramètres, puis applique-le au jeu. Quand le joueur modifie le contrôle, applique la nouvelle valeur et enregistre-la. Cet interrupteur (using UnityEngine.UI;) affiche ou masque le minuteur à l’écran et, puisque PlayerPrefs ne prend pas en charge les booléens, il stocke 1 pour activé et 0 pour désactivé :
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 transmet la nouvelle valeur du contrôle à l’écouteur : un bool pour un Toggle, un float pour un Slider, dont la position est slider.value. Définir isOn ou value depuis le code modifie le contrôle comme le ferait un joueur. Ainsi, quand la valeur change, cela appelle aussi les écouteurs. C’est pourquoi l’écouteur est ajouté après le chargement : s’il était ajouté avant, il s’exécuterait à chaque démarrage et enregistrerait aussitôt la valeur chargée. SetIsOnWithoutNotify et SetValueWithoutNotify définissent la valeur d’un contrôle sans appeler d’écouteur.
La valeur par défaut détermine ce qu’obtient un nouveau joueur. GetInt("ShowTimer", 1) affiche le minuteur jusqu’à ce que le joueur le désactive ; une valeur par défaut de 0 le masquerait pour tous ceux qui n’ont jamais ouvert les paramètres. Un paramètre de type float se charge de la même façon avec PlayerPrefs.GetFloat(key, defaultValue) : GetFloat("MouseSensitivity", 1.5f) donne une valeur de 1.5 à un nouveau joueur. Un paramètre de volume s’applique à AudioListener.volume, le volume général de Unity, de 0 (silence) à 1 (volume maximal), qui règle le niveau de tous les sons du jeu.
Défi
MoyenFais du curseur de volume un paramètre enregistré sous la clé Volume.
- Dans
Start(), chargePlayerPrefs.GetFloat("Volume", 0.8f), affecte cette valeur àslider.valueet àAudioListener.volume, puis appelleShowVolume. - Ajoute ensuite
slider.onValueChanged.AddListener(OnVolumeChanged);. - Dans
OnVolumeChanged, affectevalueàAudioListener.volume, affiche cette valeur et enregistre-la avecPlayerPrefs.SetFloatetPlayerPrefs.Save().
Appuie sur « Jouer » et déplace le curseur, puis appuie sur Arrêter et sur « Jouer » : il reste à l’endroit où tu l’as laissé. Appuie ensuite sur « Vérifier ».
Essayez vous-même
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class VolumeSetting : MonoBehaviour
{
public Slider slider;
public TMP_Text volumeText;
void Start()
{
// Charger le volume enregistré, l’appliquer et l’afficher, puis surveiller les changements du slider
}
void OnVolumeChanged(float value)
{
// Appliquer, afficher et enregistrer le nouveau volume
}
void ShowVolume(float volume)
{
volumeText.text = "Volume: " + Mathf.RoundToInt(volume * 100) + "%";
}
}
Toutes les leçons de Créer de vrais jeux
1Texte à l’écran
Canvas et texteAfficher le scoreFormater les nombresUn compte à reboursRécapitulatif : compteur de vitesse4Scènes et niveaux
Charger une scèneRedémarrer le niveauNiveau suivantConserver entre les scènesRécapitulatif : sélection du niveau2Boutons et écrans
Boutons et onClickLambdasRelier les éléments dans l’InspectorActiver et désactiver les panneauxBarres de santéRécapitulatif : boutique d’améliorations5Sauvegarder avec PlayerPrefs
Enregistrer un nombreCharger avec une valeur par défautMeilleur scoreEnregistrer les paramètresRécapitulatif : les pièces à la banqueEntraînez-vous par vous-même : Playground Unity