Guardar ajustes
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 25 de 60.
Un ajuste se elige una vez y se espera que se conserve en todas las partidas posteriores, así que debe guardarse en PlayerPrefs. Cuando empieza el juego, carga el ajuste, asígnalo a su control para que la pantalla de ajustes lo muestre y aplícalo al juego. Cuando el jugador cambie el control, aplica el nuevo valor y guárdalo. Este interruptor (using UnityEngine.UI;) muestra u oculta el temporizador en pantalla y, como PlayerPrefs no tiene un tipo bool, almacena 1 si está activado y 0 si está desactivado:
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 pasa el nuevo valor del control al oyente: un bool para un Toggle y un float para un Slider, cuya posición es slider.value. Asignar isOn o value desde el código cambia el control igual que lo haría un jugador, así que, cuando cambia el valor, también se llama a los oyentes. Por eso el oyente se añade después de cargar el ajuste: si se añadiera antes, se ejecutaría cada vez que el juego empieza y guardaría inmediatamente el valor cargado. SetIsOnWithoutNotify y SetValueWithoutNotify configuran un control sin llamar a ningún oyente.
El valor predeterminado determina qué obtiene un jugador nuevo. GetInt("ShowTimer", 1) muestra el temporizador hasta que el jugador lo desactiva; un valor predeterminado de 0 lo ocultaría para todos los que nunca abrieran los ajustes. Un ajuste de tipo float se carga del mismo modo con PlayerPrefs.GetFloat(key, defaultValue): GetFloat("MouseSensitivity", 1.5f) asigna 1.5 a un jugador nuevo. El ajuste del volumen se aplica a AudioListener.volume, el volumen maestro de Unity, que va de 0 (silencio) a 1 (volumen máximo) y ajusta todos los sonidos del juego.
Desafío
IntermedioHaz que el control deslizante de volumen sea un ajuste guardado con la clave Volume.
- En
Start(), cargaPlayerPrefs.GetFloat("Volume", 0.8f), asígnalo aslider.valueyAudioListener.volume, y llama aShowVolume. - Después, añade
slider.onValueChanged.AddListener(OnVolumeChanged);. - En
OnVolumeChanged, aplicavalueaAudioListener.volume, muéstralo y guárdalo conPlayerPrefs.SetFloatyPlayerPrefs.Save().
Pulsa «Jugar» y mueve el control deslizante; después, pulsa Stop y «Jugar»: se queda donde lo dejaste. Después, pulsa «Comprobar».
Pruébalo tú mismo
using UnityEngine;
using UnityEngine.UI;
using TMPro;
public class VolumeSetting : MonoBehaviour
{
public Slider slider;
public TMP_Text volumeText;
void Start()
{
// Carga el volumen guardado, aplícalo y muéstralo; luego escucha los cambios del slider
}
void OnVolumeChanged(float value)
{
// Aplica, muestra y guarda el nuevo volumen
}
void ShowVolume(float volume)
{
volumeText.text = "Volume: " + Mathf.RoundToInt(volume * 100) + "%";
}
}
Todas las lecciones de Creación de juegos reales
1Texto en pantalla
Canvas y textoMuestra la puntuaciónDa formato a los númerosUn temporizador de cuenta regresivaRepaso: velocímetro2Botones y pantallas
Botones y onClickLambdasConectar en el InspectorPaneles activados y desactivadosBarras de saludRepaso: tienda de mejoras5Guardar con PlayerPrefs
Guardar un númeroCargar con un valor predeterminadoPuntuación más altaGuardar ajustesRepaso: monedas en el banco3El gestor del juego
Un solo script ejecuta el juegoEl SingletonEstados del juegoActivar el estadoRepaso: gestor de rondas6Proyecto: Corredor sin fin
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entradaPractica por tu cuenta: Playground de Unity