A comunidade brasileira de desenvolvimento e programação de jogos.
Bem-vindo: Ter Ago 11, 2020 10:21 pm

Todos os horários são GMT - 3 horas




Criar novo tópico Responder  [ 5 mensagens ] 
Autor Mensagem
 Título: [Ajuda ]Colocacar audio
MensagemEnviado: Qua Nov 25, 2015 1:45 pm 
Offline
Membro novo

Registrado em: Qua Nov 25, 2015 1:43 pm
Mensagens: 3
Pessoal, criei um menu pro meu jogo com audio, e quando clica nele o audio para ao objeto menu se destruir, porem criei outro objeto chamado musica que tocaria a musica da fase, mas não sei como ativar a musica quando o menu destruir, qual codigo uso pra isso.
Pois logo ao colocar o audio no objeto musica ele ja toca se estiver marcado play on awake, dai acaba tocando ela junto com a musica do menu, como faço pra acionar a musica só depois que o menu é destruido?


Voltar ao topo
 Perfil  
 
 Título: Re: [Ajuda ]Colocacar audio
MensagemEnviado: Qua Nov 25, 2015 1:52 pm 
Offline
Membro novo

Registrado em: Qua Nov 25, 2015 1:43 pm
Mensagens: 3
se alguem puder ajudar agradeço


Voltar ao topo
 Perfil  
 
 Título: Re: [Ajuda ]Colocacar audio
MensagemEnviado: Qui Nov 26, 2015 1:04 am 
Offline
Membro intermediário

Registrado em: Sex Abr 04, 2014 11:10 pm
Mensagens: 144
Amigo, vou entender que com 'Menu destruido' você está mudando de cena, já deixo a dica que aprenda a criar mecânicas genéricas para seu projetos, e vamos criar uma simples de audio aqui.

Primeiro, crie um GameObject vazio, depois adicione o componente Audio Source ao mesmo e desmarque a opção PlayOnAwake.
Segundo, crie um Script C# chamado 'MecanimAudio' e também o adicione ao GameObject criado.

Aqui está o script funcional (caso esteja mudando de cena você pode você pode utilizar o processo acima ou usar o DontDestroyOnLoad):

Código:
using UnityEngine;
using System.Collections;

public class MecanimAudio : MonoBehaviour {

   public AudioSource manipuladorAudio; //Atribui o Audio Source
   
   public AudioClip[] somGenerico; //Quantidade de audios que deseja, no seu caso 2 (Menu e Fase).
   public int somAtual; //Numero referente ao som no Array
   
   public bool soltarSom = true;   
   public bool trocarMusica = false;  //Quando clicado no inspector, trocara a musica de acordo com o numero somAtual
   public bool iniciarDireto = true;  //Inicia o som quando a fase for carregada
   public bool somLoop; //Deseja que o som fique repetindo ou nao
   public bool somMute; //Deseja mute o som
   
   void Start(){
   }
   
   void FixedUpdate(){
      if(soltarSom == true){
         manipuladorAudio.PlayOneShot(somGenerico[somAtual]); //Aqui ira tocar a musica devido a posiçao dela
         soltarSom = false;
         trocarMusica = false;
      }
   
      
      if(trocarMusica == true){
         manipuladorAudio.Stop(); //Parar som anterior
         soltarSom = true;
      }
      
      
      
      //Aqui embaixo alguns componentes que o Audio Source oferece
      if(iniciarDireto == true){
         manipuladorAudio.playOnAwake = true;
      }
      else{
         manipuladorAudio.playOnAwake = false;
      }
      
      if(somLoop == true){
         manipuladorAudio.loop = true;
      }
      else{
         manipuladorAudio.loop = false;
      }
      
      if(somMute == true){
         manipuladorAudio.mute = true;
      }
      else{
         manipuladorAudio.mute = false;
      }
   }
}



Agora no inspector você pode manipular seu sons, lembrando que precisa mudar o numero da variável somAtual e depois clicar no trocarSom para trocar em tempo real a música. Assim você pode também modificar o script futuramente caso aja necessidade.

Bom, espero ter ajudado, tudo de bom.


Voltar ao topo
 Perfil  
 
 Título: Re: [Ajuda ]Colocacar audio
MensagemEnviado: Qui Nov 26, 2015 4:51 pm 
Offline
Membro novo

Registrado em: Qua Nov 25, 2015 1:43 pm
Mensagens: 3
opa valeu mesmo, minha duvida agora é outra, criei um objeto que da pontos, e queria que quando encosta nele o objeto emite o som de ponto, fiz esse script no personagem, mas como o personagem ja tem som de morrendo, ele emite esse som de morte ao pegar os pontos, porem fiz o mesmo script pro objeto pra qndo colidir com a Tag do personagem, se destroi e emite o som, mas não acontece nada :(


No personagem


void OnCollisionEnter2D(Collision2D coll)
{

if (coll.gameObject.tag == "pontos")
{
Destroy(coll.gameObject);
pontos += 1;
AudioSource audio = GetComponent<AudioSource>();
audio.Play();

}


if (coll.gameObject.tag == "Vida")
{
Destroy(coll.gameObject);
life += 1;


}





No Objeto


// Use this for initialization
void Start()
{

}

// Update is called once per frame
void FixedUpdate()
{



}



void Update()
{

}

void OnCollisionEnter2D(Collision2D coll)
{

if (coll.gameObject.tag == "Personagem")
{

AudioSource audio = GetComponent<AudioSource>();
audio.Play();

}

}
}


Voltar ao topo
 Perfil  
 
 Título: Re: [Ajuda ]Colocacar audio
MensagemEnviado: Sex Nov 27, 2015 12:23 am 
Offline
Membro intermediário

Registrado em: Sex Abr 04, 2014 11:10 pm
Mensagens: 144
Primeiro, o fato de você utilizar duas colisões para a mesma ação é um erro, isto gera perda de otimização, colisão dupla, perda de fps, etc... Então trabalhe no momento com o o Player.

Segundo, o Audio Source da Unity é um ferramenta um pouco ampla, mas entenda que ela trabalha com multi audios ao mesmo tempo, você pode adicionar centenas de clips de audio e a ferramenta reproduzira no espaço todos ao mesmo tempo, ou tempo determinado.

Uma demonstração:

Código:
using UnityEngine;
using System.Collections;

public class AudioSobrepor : MonoBehaviour {

   public AudioSource manipuladorAudio; //Atribuir o audio source do projeto
   public AudioClip[] somGenerico; //Array de sons genericos
   
   void Start(){
      manipuladorAudio.PlayOneShot(somGenerico[0]);  //Inicia um som generico
   }
   
   void FixedUpdate(){
      if(Input.GetKeyUp(KeyCode.T)){
         manipuladorAudio.PlayOneShot(somGenerico[1]); //Som que ira se sobrepor
      }
   }
}



No caso de audio para jogo, é sempre bom trabalhar com Array´s, assim você mantém uma lista de Som Generico e Trilha organizada tudo em um só script rodando totalmente otimizado.

No seu script você só precisa fazer isto:

Código:
    public AudioSource manipuladorAudio;
    public AudioClip[] somGenerico;

    void OnCollisionEnter2D(Collision2D coll)
{

if (coll.gameObject.tag == "pontos")
{
Destroy(coll.gameObject);
pontos += 1;
manipuladorAudio.PlayOneShot(somGenerico[0]);  //Som de pontuação

}


if (coll.gameObject.tag == "Vida")
{
Destroy(coll.gameObject);
life += 1;
manipuladorAudio.PlayOneShot(somGenerico[1]);  //Som de pontuação

}



Outra dica que eu possa te dar é, evite utilizar o GetComponent em ações, a forma que você aplicou nas colisões é uma redundância tremenda. Se é para evitar ficar adicionando componentes no Inspector você pode guardar em váriaveis.

Exemplo:

Código:

    private AudioSource manipuladorAudio;

    void Start(){
        manipuladorAudio = GetComponent<AudioSource>(); //Assim você guarda o componente na variável e não gasta memória.
    }



Espero ter ajudado, tudo de bom.


Voltar ao topo
 Perfil  
 
Exibir mensagens anteriores:  Ordenar por  
Criar novo tópico Responder  [ 5 mensagens ] 

Todos os horários são GMT - 3 horas


Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes


Enviar mensagens: Proibido
Responder mensagens: Proibido
Editar mensagens: Proibido
Excluir mensagens: Proibido
Enviar anexos: Proibido

Ir para:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzido por: Suporte phpBB