Guardar ajustes
Parte de la sección Creación de juegos reales del Journey de Unity de Coddy. Lección 25 de 56.
Una configuración se elige una vez y se espera que se mantenga en todas las partidas posteriores, así que debe guardarse en PlayerPrefs. Cuando empieza el juego, carga la configuración, asígnala al control para que la pantalla de configuración la muestre y aplícala 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 para activado y 0 para 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, un float para un Slider, cuya posición es slider.value. Al establecer isOn o value desde el código, el control cambia como si lo hiciera un jugador, así que cuando cambia el valor también se llama a los oyentes. Por eso el oyente se agrega después de cargar el valor: si se agregara antes, se ejecutaría en cada inicio y volvería a guardar inmediatamente el valor cargado. SetIsOnWithoutNotify y SetValueWithoutNotify establecen 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 desactive; un valor predeterminado de 0 lo ocultaría a todos los que nunca abrieran la configuración. Una configuración de tipo float se carga del mismo modo con PlayerPrefs.GetFloat(key, defaultValue): GetFloat("MouseSensitivity", 1.5f) da 1.5 a un jugador nuevo.
Desafío
IntermedioLa pantalla Settings tiene un control deslizante de volumen de 0 a 1 y un texto que lo muestra como porcentaje. Haz que el volumen sea un ajuste guardado con la clave Volume:
- Un jugador nuevo empieza en 0.8, que se muestra como Volume: 80%.
- El volumen se aplica a todo el juego mediante
AudioListener.volume, el volumen maestro de Unity de 0 (silencio) a 1 (máximo), que escala todos los sonidos del juego. - Cuando el juego empieza, se aplica el volumen guardado y el control deslizante y el texto lo muestran.
- Cuando el jugador mueve el control deslizante, se aplica el nuevo volumen, el texto se actualiza y el volumen se guarda.
ShowVolume(float volume) ya escribe el texto.
Pulsa Play y mueve el control deslizante, después Stop y Play de nuevo, y luego Check.
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 detecta 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) + "%";
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
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ímetro4Escenas y niveles
Cargar una escenaReiniciar el nivelSiguiente nivelConservar entre escenasRepaso: selección de nivel10Proyecto: plataformas 3D
El recorridoPlataformas móviles2Botones 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 infinito
Tres carrilesObstáculos por delante9El nuevo sistema de entrada
Dos sistemas de entradaTeclado y ratónPulsado en este fotogramaAcciones de entradaRepaso: cambio de entrada