Jump to content
Sign in to follow this  
JuanchiBM

ANSWERED Como guardo el Valor del volumen de un Slider?

Recommended Posts

Mi problema es el siguiente, con el slider controlo el volumen del juego, pero cuando cambio de escena, la barra del slider vuelve a estar al maximo (Aunque el volumen no se escuche ya que, en la anterior escena lo bajas) Por lo tanto, quiero saber como guardar la posicion de la barra del slider, el Value o Valor

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;

public class Volumen : MonoBehaviour
{
    public float sliderValue;
    public AudioMixer mixer;
    public float volumen;

    void Start()
    {
        volumen = PlayerPrefs.GetFloat("Musica", sliderValue);
    }

    public void SetLevel (float sliderValue)
    {
        mixer.SetFloat("Sonido", Mathf.Log10 (sliderValue) * 20);
        PlayerPrefs.SetFloat("Musica", sliderValue);
    }
}

Ese es el codigo, lo de los PlayerPrefs lo añadi despues para intentar que se guarde, pero no funciono asi que no le hagan caso ah, seguro debo usar PlayerPrefs pero no se como seria la manera correcta, gracias ;D

Share this post


Link to post
Share on other sites

Elimina la variable volumen y en la función start llama a la función SetLevel con el valor guardado.

SetLevel(PlayerPrefs.GetFloat("Musica"));

Share this post


Link to post
Share on other sites
4 hours ago, francoe1 said:

Elimina la variable volumen y en la función start llama a la función SetLevel con el valor guardado.


SetLevel(PlayerPrefs.GetFloat("Musica"));

No me funciono, cambie el Start por un update pero tampoco funciono

public class Volumen : MonoBehaviour
{
    public float sliderValue;
    public AudioMixer mixer;
  
    void Update()
    {
        SetLevel(PlayerPrefs.GetFloat("Musica"));
    }

    public void SetLevel (float sliderValue)
    {
        mixer.SetFloat("Sonido", Mathf.Log10 (sliderValue) * 20);
        PlayerPrefs.SetFloat("Musica", sliderValue);
    }
}

Alguna otra opcion??

Share this post


Link to post
Share on other sites
public class Volumen : MonoBehaviour
{
    public float sliderValue;
    public AudioMixer mixer;
  
    void Start()
    {
        SetLevel(PlayerPrefs.GetFloat("Musica"));
    }

    public void SetLevel (float sliderValue)
    {
        mixer.SetFloat("Sonido", Mathf.Log10 (sliderValue) * 20);
        PlayerPrefs.SetFloat("Musica", sliderValue);
    }
}

Creo que @francoe1 se refería a algo como esto 

PD: No deberías programar en español

Share this post


Link to post
Share on other sites
3 hours ago, Moand said:

public class Volumen : MonoBehaviour
{
    public float sliderValue;
    public AudioMixer mixer;
  
    void Start()
    {
        SetLevel(PlayerPrefs.GetFloat("Musica"));
    }

    public void SetLevel (float sliderValue)
    {
        mixer.SetFloat("Sonido", Mathf.Log10 (sliderValue) * 20);
        PlayerPrefs.SetFloat("Musica", sliderValue);
    }
}

Creo que @francoe1 se refería a algo como esto 

PD: No deberías programar en español

Si, hice eso, pero despues probe con un Update porque no servia, y si, tengo que acostumbrarme a programar en ingles, por eso algunas estan en ingles y otras no jajajaja, gracias por el consejo igual

Share this post


Link to post
Share on other sites
On 8/1/2020 at 11:17 AM, JuanchiBM said:

Mi problema es el siguiente, con el slider controlo el volumen del juego, pero cuando cambio de escena, la barra del slider vuelve a estar al maximo (Aunque el volumen no se escuche ya que, en la anterior escena lo bajas) Por lo tanto, quiero saber como guardar la posicion de la barra del slider, el Value o Valor


using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Audio;

public class Volumen : MonoBehaviour
{
    public float sliderValue;
    public AudioMixer mixer;
    public float volumen;

    void Start()
    {
        volumen = PlayerPrefs.GetFloat("Musica", sliderValue);
    }

    public void SetLevel (float sliderValue)
    {
        mixer.SetFloat("Sonido", Mathf.Log10 (sliderValue) * 20);
        PlayerPrefs.SetFloat("Musica", sliderValue);
    }
}

Ese es el codigo, lo de los PlayerPrefs lo añadi despues para intentar que se guarde, pero no funciono asi que no le hagan caso ah, seguro debo usar PlayerPrefs pero no se como seria la manera correcta, gracias ;D

Ya encontre el problema

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Audio;

public class Volumen : MonoBehaviour
{
    public float sliderValue;
    public AudioMixer mixer;
    public Slider music;

    void Start()
    {
        music.value = PlayerPrefs.GetFloat("Musica");
    }

    public void SetLevel(float sliderValue)
    {
        mixer.SetFloat("Sonido", Mathf.Log10(sliderValue) * 20);
        PlayerPrefs.SetFloat("Musica", sliderValue);
    }
}

No encontraba el componente Value, sabia que era algo por el estilo pero no sabia como hacerlo, lo unico que hice fue crear un objeto "Slider" y asignarlo al propio slider, y luego, al empezar, que el componente "Value" del Slider sea igual a la Pref "Musica" la cual es igual al sliderValue que se puso con anterioridad, con esto, aunque se cierre el juego, el volumen se va a quedar guardado, y no solo eso, si no que al cambiar de escenario tambien se queda guardado

Share this post


Link to post
Share on other sites

Y cada vez que se ejecute ese código en un ordenador/móvil o lo que sea que el app no esté instalada por primera vez, reventará. No encontrará el float de Musica en PlayerPrefs. Tienes que ponerle un valor por defecto que lo acepta el GetFloat en el segundo parámetro.

Share this post


Link to post
Share on other sites

playerPrefs tiene la funcion "HasKey" para "preguntarle" a ver si esa key existe... en cuyo caso procedes a "cargar" el valor de esa key

Edited by Igor

Share this post


Link to post
Share on other sites
Sign in to follow this  

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...