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

Audio do dano não esta reproduzindo

Estou com problemas para rodar o audio de dano, olhei as perguntas no fórum, reassisti a aula, bati o código do professor com o meu mas não consigo resolver.

No console tenho os seguintes erros: Logo quando starto { NullReferenceException: Object reference not set to an instance of an object ControlaAudio.Awake () (at Assets/Scripts/ControlaAudio.cs:12) } Quando começo a receber dano { NullReferenceException: Object reference not set to an instance of an object ControlaJogador.TomarDano (System.Int32 dano) (at Assets/Scripts/ControlaJogador.cs:87) ControlaInimigo.AtacaJogador () (at Assets/Scripts/ControlaInimigo.cs:63) } Obs¹ { Inclusive agora não esta mais dando o GameOver, se eu comentar o: ControlaAudio.instancia.PlayOneShot(SomDeDano); Volta a dar GameOver normal. }

Super estranho pois eu não consigo ver diferença no meu projeto para o seu professor, já chequei as variáveis para ver se estão setadas, se os components estão com os scripts... não sei..

Obs² { Quando eu dou Play acompanhando o Debug, percebo que Meu Audio Source não pega automaticamente a música, como acontece na aula. }

ControlaAudio:

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

public class ControlaAudio : MonoBehaviour
{
    private AudioSource meuAudioSource;
    public static AudioSource instancia;

    void Awake () // Awake roda antes do START
    {
        meuAudioSource.GetComponent<AudioSource>();
        instancia = meuAudioSource;
    }
}

ControlaJogador

    public float Velocidade = 10;
    private Vector3 direcao;
    public LayerMask MascaraChao;
    public GameObject TextoGameOver;
    public int Vida = 100;
    public ControlaInterface scriptControlaInterface;
    public AudioClip SomDeDano;
    //----- COMPONENTS 
    private Rigidbody rigidbodyJogador;
    private Animator animatorJogador;

    public void TomarDano(int dano)
    {
        Vida -= dano;
        // Chama o Método Atualizar Slider de ControlaInterface 
        scriptControlaInterface.AtualizarSliderVidaJogador();

        // Rodar SomDeDano uma vez só, OneShot
        ControlaAudio.instancia.PlayOneShot(SomDeDano);

        // GameOver
        if (Vida <= 0)
        {
            Time.timeScale = 0;
            TextoGameOver.SetActive(true);
        }
    }

Desde já muito obrigado, as aulas estão ótimas!

2 respostas
solução!

Oi, Vivian, tudo bem?

A variável não está recebendo o objeto AudioSource por isso dá erros de falta a referencia:

Você pode resolver trocando a linha

meuAudioSource.GetComponent<AudioSource>();

// trocar por:

meuAudioSource = GetComponent<AudioSource>();

Agora a variável recebe o valor do AudioSource como objeto e pode acessar a referencia para tocar os áudios.

Bons estudos!

Kkkk meu deus... Ok, muitíssimo obg, de verdade eu não tinha percebido isso, e é engraçado porque eu batia o código e não conseguia enxergar. Show, estou adorando as aulas!

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