Já vi os antigos comentários a cerca da ordem dos Scripts, e já imaginava que isso estava ocorrendo. Meu Script Status estava sendo rodado depois do Script da Interface, logo, estava se gerando o erro de NullReference. Porém, queria entender, como o seu durante o vídeo rodou sem algum problema, pode ser a versão da unity? Não entendi muito bem qual a diferença da minha execução para a sua, para ter que gerar esse erro. Muitas pessoas estavam dizendo que esse erro estava apenas aparecendo quando reiniciavam o jogo, porém para mim já ocorria de primeira. Essa é apenas uma duvida mesmo, já que com a ordem dos Scripts já acertei esse erro e está rodando perfeitamente. Apenas fiquei sem entender o porque não ocorreu esse erro de primeira no vídeo, ou com mais alguém. Caso queira conferir meu código segue a baixo
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Status : MonoBehaviour
{
public int VidaInicial = 100;
[HideInInspector]
public int Vida;
public float Velocidade = 5;
private void Start()
{
Vida = VidaInicial;
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ControlaJogador : MonoBehaviour, IMatavel
{
public LayerMask MascaraChao;
private Vector3 direcao;
public GameObject TextoGameOver;
private AnimacaoPersonagem animacaoJogador;
public ControlaInterface ScriptControlaInterface;
public AudioClip SomDeDano;
private MovimentoJogador meuMovimentoJogador;
public Status statusJogador;
private void Start()
{
Time.timeScale = 1;
meuMovimentoJogador = GetComponent<MovimentoJogador>();
animacaoJogador = GetComponent<AnimacaoPersonagem>();
statusJogador = GetComponent<Status>();
}
void Update()
{
float eixoX = Input.GetAxisRaw("Horizontal");
float eixoZ = Input.GetAxisRaw("Vertical");
direcao = new Vector3(eixoX, 0, eixoZ);
animacaoJogador.Movimentar(direcao.magnitude);
if (statusJogador.Vida <= 0)
{
if (Input.GetButtonDown("Fire1"))
{
SceneManager.LoadScene("Game");
}
}
}
void FixedUpdate()
{
meuMovimentoJogador.Movimentar(direcao, statusJogador.Velocidade);
meuMovimentoJogador.RotacaoJogador(MascaraChao);
}
public void TomarDano(int dano)
{
statusJogador.Vida -= dano;
ControlaAudio.instancia.PlayOneShot(SomDeDano);
ScriptControlaInterface.AtualizarVidaJogador();
if (statusJogador.Vida <= 0)
{
Morrer();
}
}
public void Morrer()
{
Time.timeScale = 0;
TextoGameOver.SetActive(true);
}
}