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

[Bug] o codigo de interface não funciona.

Toda vez que eu dou "play" no jogo, aparece o erro:

NullReferenceException: referência de objeto não definida para uma instância de um objeto ControlaInterface.Start() (em Assets/codigos/ControlaInterface.cs:14)

Vou mandar os Scripts de Controlainterface e controlaPersonagem.

5 respostas

private Vector3 direcao; private Rigidbody rigidbodyJogador; public LayerMask MascaraChao; public GameObject TextoFinal; public ControlaInterface scriptControlaInterface; public AudioClip SomDeDano; private ControlaRotacao minhaRotacao; private ControlaAnimacao animacaoPersonagem; public Status meusStatus; // Update is called once per frame private void Start() { rigidbodyJogador = GetComponent(); Time.timeScale = 1; minhaRotacao = GetComponent(); animacaoPersonagem = GetComponent(); meusStatus = GetComponent(); } void Update() {

  float eixoX = Input.GetAxis("Horizontal");
  float eixoZ = Input.GetAxis("Vertical");
  
   direcao = new Vector3(eixoX, 0, eixoZ);
  
   animacaoPersonagem.Movimentar(direcao.magnitude);
    if(meusStatus.Vida <= 0)
      {
        if(Input.GetButtonDown("Fire1"))
        {
            SceneManager.LoadScene("projeto_zumbi_alura_01");
        }
      }
}
void FixedUpdate() {

    rigidbodyJogador.MovePosition
   (rigidbodyJogador.position +
    (direcao * meusStatus.Velocidade * Time.deltaTime));
    minhaRotacao.RotacaoJogador(MascaraChao);
}
public void TomarDano (int dano)
{
 meusStatus.Vida -= dano;
  scriptControlaInterface. AtualizaSliderVidaPersonagem();
  ControlaAudio.instancia.PlayOneShot(SomDeDano);
 if(meusStatus.Vida <= 0)
 {
 Time.timeScale = 0;
 TextoFinal.SetActive(true);
 }

}

}

public class ControlaInterface : MonoBehaviour{

  private ControlaPersonagem scriptControlaPersonagem;
  public Slider SliderVidaPersonagem;

  // Start is called before the first frame update
    void Start()
    {
      scriptControlaPersonagem = GameObject.FindWithTag("Jogador").GetComponent<ControlaPersonagem>();
      SliderVidaPersonagem.maxValue = scriptControlaPersonagem.meusStatus.Vida;
      AtualizaSliderVidaPersonagem();
        
    }

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

    }
    public void AtualizaSliderVidaPersonagem()
    {
        SliderVidaPersonagem.value = scriptControlaPersonagem.meusStatus.Vida;
    }

Oi, Edison, tudo bem?

A SliderVidaPersonagem está preenchida no Inspector com o objeto?

Sim, esta preenchido.

solução!

Pode ser a ordem de execução dos scripts porque o status tem que rodar antes da interface:

https://docs.unity3d.com/Manual/class-MonoManager.html

Vá nesse menu acima na Unity coloca o Status e depois o ControlaInterface, assim o status sempre vai rodar primeiro. Veja se isso soluciona.