Estoy tratando de hacer una casilla de verificación en la interfaz de usuario de Unity que devuelva un juego sin fin bool como "verdadero" y "falso" si es un juego cronometrado. Quiero hacer esto con PlayerPrefs. Entiendo que PP solo admite int, float y strings. Creé una función que es fiel a 1.
Tengo un Game Manager que maneja el estado general del juego, este gameobject es el único en mi juego que no se destruye durante la carga.
Hasta ahora, Game Manager tiene un bool 'endless' que se inicializa como
endless = PlayerPrefs.GetInt("Endless", 1) == 0;en la función de inicio.
Ahora tengo un menú de opciones que alberga la casilla de verificación, en este script es el siguiente:
public void OnToggleEndless() { if (endLessToggle.isOn) { PlayerPrefs.SetInt("Endless", manager.endless ? 1 : 0); print("Endless Button ticked"); } else { PlayerPrefs.SetInt("Endless", manager.endless ? 0 : 0); print("Endless Button unticked"); } }Pero cuando lo conecto, juego el juego y voy al menú de opciones y marco 'Juego sin fin', no pasa nada. Traté de poner OnToggleEndless(); método en Actualizar, pero eso solo me da líneas interminables de la impresión ("Botón sin fin marcado"); mensaje, los PlayerPrefs no se guardan. Me pregunto si la casilla de verificación está conectada correctamente. ¡No puedo descifrar esto!
Los PlayerPrefs no se guardan
El guardado de PlayerPrefs parece defectuoso. ¿Está seguro de que desea verificar manager.endless en lugar de endLessToggle.isOn ?
Porque el estado de endLessToggle.isOn cambia dependiendo de si habilitó o deshabilitó la casilla de verificación. Pero el estado de manager.endless nunca cambia y se establece en verdadero/falso al comienzo del juego.
Esto da como resultado que en realidad no cambie la variable PlayerPrefs cuando activa la casilla de verificación.
Ejemplo:
private void Start() { // Check if we enabled or disabled the endlessToggle Checkbox last time we played // and set the checkbox accordingly. endLessToggle.isOn = (PlayerPrefs.GetInt("Endless", 1) == 0); } // Call when we toggle the Checkbox. public void OnToggleEndless() { // Get the current state of our toggle button. int enable = endLessToggle.isOn ? 1 : 0; // Log result into console to test it. Debug.Log("We set Endless to: " + enable); // Set the PlayerPrefs equal to our current state. PlayerPrefs.SetInt("Endless", enable); } No creo que necesite usar una variable global de su GameManager de todos modos, porque ya tiene PlayerPrefs que hace lo mismo por usted.
Además, debe establecer el estado de CheckBox igual a PlayerPrefs cuando inicia el juego.