Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Slider de Volume com Comportamento Estranho

Após fazer a implementação do script no Painel de Opções, percebi que, ao reduzir o volume ao 0, o som volta a ficar 100%, mas se o slider ficar com um valor muito próximo ao 0, daí sim o som some, como na imagem abaixo:
Insira aqui a descrição dessa imagem para ajudar na acessibilidade
o valor não está totalmente zerado, mas eu não escuto a música, mesmo com meu headset no máximo, ou seja, pro script realmente está em 0. Agora...
Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Se eu puxo até o final, onde realmente deveria ficar SEM música, a música volta a ter o volume normal, como se 0 significasse 1.

Como posso resolver isso?

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
3 respostas

Olá, Gabriel! Tudo bem?

Isso pode estar acontecendo devido à forma como o valor do slider está sendo interpretado pelo seu script. Aqui estão algumas sugestões para resolver esse problema:

  1. Verifique o Script do AudioManager: Certifique-se de que o script que controla o volume está configurando corretamente o volume do mixer de áudio. O valor do slider deve ser mapeado para o volume do mixer corretamente. Algo assim pode ajudar:

    public AudioMixer audioMixer;
    
    public void SetVolume(float volume)
    {
        audioMixer.SetFloat("Volume", Mathf.Log10(volume) * 20);
    }
    

    Aqui, Mathf.Log10(volume) * 20 é usado para converter o valor linear do slider em uma escala logarítmica, que é mais natural para a percepção humana.

  2. Verifique o Range do Slider: Certifique-se de que o valor mínimo do slider seja 0 e o máximo 1, como você já configurou. Isso é importante para garantir que os valores estejam corretos.

  3. Teste com Valores Diferentes: Tente adicionar um pequeno valor ao volume quando ele for zero para evitar problemas de divisão por zero ou comportamento inesperado. Por exemplo:

    float adjustedVolume = Mathf.Clamp(volume, 0.0001f, 1f);
    

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Todo o script de gerenciamento de áudio é novo pra mim, nunca usei essas funções, e ainda não entendo muito bem como elas funcionam, por isso fui só no "copia e cola" mesmo. O código passado pelo professor é:

    public void SetMixerVolume(MixerGroup group, float normalizedValue)
    {

        string groupString = MixerGroups[group];
        float volume = Mathf.Log10(normalizedValue) * 20;
        audioMixer.SetFloat(groupString, volume);

    }

Creio eu que faz a mesma coisa que o senhor mostrou ali, então não pode ser isso.

Como eu implementaria esse AdjustedVolume no script para realizar o teste?

solução!

Como eu não saberia usar esse AdjustedVolume, pesquisei uma forma mais fácil de corrigir este problema e cheguei no seguinte resultado:

    public void SetMixerVolume(MixerGroup group, float normalizedValue)
    {

        float volume;

        if (normalizedValue <= 0.0001f) 
        {

            volume = -80f;

        } else 
        {
        
            volume = Mathf.Log10(normalizedValue) * 20;


        }

        string groupString = MixerGroups[group];
        audioMixer.SetFloat(groupString, volume);

    }

Como o problema ocorre em um valor muito próximo a 0, fiz a verificação com if para que quando o slider ficar abaixo de 0,0001, ele automaticamente defina o valor do volume para -80f, que é o valor mínimo do Audio Mixer, e caso contrário, faz o ajuste do volume com o Mathf.Log10.

Realizando o teste no jogo, isso resolveu meu problema, e agora o slider do volume reduz corretamente o valor de volume do jogo :)