Ir ao conteúdo

Posts recomendados

Postado

 quero que toque muscas em diferentes momento do meu jogo . A primeira , creio eu , seria automatica só colocando pra iniciar quando o jogo for iniciado . A segunda musica eu queria que tocasse quando o jogador aperta play e nisso , pausar/parar a musica do menu . E uma terceira musica de game over , com a mesma dinamica da anterior . Só que eu não to conseguindo fazer isso , eu criei um script chamado Music Manager pra controlar as musicas e tentei chamar a funça de PlayGameMusic no script GameManager mas o unity retornou esse erro : NullReferenceException: Object reference not set to an instance of an object

GameManager.OnEnable () (at Assets/Script/GameManager.cs:61)

 

 

< using UnityEngine;

 

public class MusicManager : MonoBehaviour

{

 

    public AudioClip menuMusic;

    public AudioClip gameMusic;

    public AudioClip gameOverMusic;

 

    private AudioSource audioSource;

 

    void Start()

    {

        audioSource = GetComponent<AudioSource>();

        PlayMenuMusic();

    }

 

    public void PlayMenuMusic()

    {

        audioSource.Stop(); // para a música atual antes de reproduzir a nova

        audioSource.clip = menuMusic;

        audioSource.Play();

    }

 

    public void PlayGameMusic()

    {

        audioSource.Stop(); // para a música atual antes de reproduzir a nova

        audioSource.clip = gameMusic;

        audioSource.Play();

    }

 

    public void PlayGameOverMusic()

    {

        audioSource.Stop(); // para a música atual antes de reproduzir a nova

        audioSource.clip = gameOverMusic;

        audioSource.Play();

    }

} >

 

esse é o script do MusicManag

Postado

Então, geralmente esse problema dá quando você esqueceu de referenciar uma instancia/objeto. E eu acho que foi isso mesmo, nessa parte aqui, você colocou assim:

 

private AudioSource audioSource;

 


Deveria continuar desta forma:

 

audioSource = new AudioSource();

Dessa forma você vai estar determinando que essa variável chamada 'audioSource' irá ter o valor de um novo objeto do tipo 'AudioSource'. 

Imagine, é como declarar um inteiro e depois querer usar as funções de math(). Sem que você tenha dado nenhum valor para esse inteiro. Exemplo: 'int numero' e aí depois tentar tirar a potência 'math.pow(2)'; Isso não vai funcionar pois você está tentando elevar ao quadrado um valor que ainda não existe.

Portanto, quando você chama PlayMenuMusic() e dentro dela já tem uma função com audioSource.Play() ou audioSource.Stop(), o programa não tem como entender o que você está querendo começar ou parar pois a variável está com valor vazio enquanto você não determinar que ela é um novo objeto da classe.

No void start(), você até pode ter colocado isso: audioSource = GetComponent<AudioSource>();
Mas isso só se sustenta dentro da própria função e enquanto ela estiver sendo executado. Uma solução seria usar um 'ref audioSource'  ou 'out audioSource' como parâmetro dessa função, assim audioSource poderá "sair" já modificado da função. Ficaria mais ou menos assim:
 

private AudioSource audioSource;

void Start(ref audioSource)

{	
    audioSource = GetComponent<AudioSource>();
    PlayMenuMusic(audioSource); //Você vai precisasr modificar os métodos PlayMusic() para receber o audioSource como parametro também
}


Dê um pesquisada no funcionamento de ref e out, deve ajudar.

Outro detalhe: use o botão code '<>' quando for colocar o código aqui no forum, da mesma forma que eu fiz, aí ele fica destacado e mais fácil de ler.

  • Obrigado 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...