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

Áudio Zumbi Esta Desconfigurando .

Olá professor , A minha duvida em relação aos audios é quando eu coloco o audio do Zumbi identificar o jogador , ele meio que sobrepoem os audios da bala e Morte Zumbi , não sei se é a quantidade de zumbis que ficam fazendo "AHRHARHAHS" ou se é o local que eu coloquei no script para fazer esse efeito sonoro , segue abaixo o local exato onde coloquei , obs;foi no script de ControlaInimigo:

public AudioClip SomDeRaivaZumbi;

void FixedUpdate()
    {
        float distancia = Vector3.Distance(transform.position, jogador.transform.position);
        movimentoInimigo.Rotacionar(direcao);
        animacaoInimigo.Movimentar(direcao.magnitude);

        if (distancia > 15)
        {
            Vagar();
        }
        else if (distancia > 2.5)
        {
            ControlaAudio.instancia.PlayOneShot(SomDeRaivaZumbi);
            //perseguição ao jogador!
            direcao = jogador.transform.position - transform.position;
            //movimentação e animação de ataque 
            movimentoInimigo.Movimentar(direcao, statusInimigo.Velocidade);
            animacaoInimigo.Atacar(false);
        }
        else
        {
            direcao = jogador.transform.position - transform.position;
            animacaoInimigo.Atacar(true);
        }
    }
2 respostas
solução!

Oi, Thalys, tudo bem?

O PlayOneShot não pararia os áudios de tocarem, porque ele suporta que múltiplos áudios possam tocar da mesma source.

O problema desse seu script é que enquanto o jogador tá perseguindo ele fica tocando o som de raiva sempre, lembra que isso tá em loop então essa linha ControlaAudio.instancia.PlayOneShot(SomDeRaivaZumbi); não vai parar de ser chamada a cada iteração e vai tocar várias vezes o mesmo som vindo do mesmo zumbi, fora os outros. Se essa for a intenção mesmo recomendo você usar o PlayOneShot com o segundo parâmetro de volume, exemplo:

ControlaAudio.instancia.PlayOneShot(SomDeRaivaZumbi, 0.3f);

O parâmetro de volume vai de 0 a 1.

Se a intenção fosse tocar só uma vez quando o zumbi visse o jogador a forma mais fácil de você conferir e testar isso é colocar uma flag, que seria uma variável booleana pra testar se o som já foi tocado, exemplo:

if(somRaivaTocou == false)
{
    ControlaAudio.instancia.PlayOneShot(SomDeRaivaZumbi);
    somRaivaTocou = true;
}

E depois você muda o valor dessa variável nos outros estados e vê se é isso que quer para em seguida refatorar o código.

Enfim, tem várias formas, se quiser posso passar algumas dicas pra não tocar o PlayOneShot um em cima do outro se ele vier do mesmo zumbi.

Mas pra esse caso especifico acredito que talvez a melhor forma seja você colocar um AudioSource no zumbi pra tocar esse som e fazer uso do isPlaying. Assim você pode colocar o som no source do AudioSource e usar algo como:

//lembre-se de criar a variável audioSource
if(audioSource.isPlaying == false)
{
    audioSource.Play();
}

Assim um som desse de raiva não toca um por cima do outro mas mantem tocando.

Tudo depende da implementação que você quer fazer são muitas possibilidades e espero ter tocado em algumas que você interessante, pode continuar postando se quiser saber mais.

Bons estudos :)

Professor,muito obrigado novamente mas uma vez o senhor me ajudou bastante , terminei os cursos de Unity e gostei bastante gostaria bastante que tivesse mais conteúdo sobre aqui no Alura , mas enquanto isso vou estudando programação ,Obrigado novamente e Feliz ano novo para o senhor e para toda equipe do Alura !

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software