Menu
CoddyTech

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.

challenge icon

Desafío

Intermedio

La 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) + "%";
    }
}
quiz iconPonte a prueba

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