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

Erro na interface após refatoração do código

Eu recebo um erro de NullReferenceException no meu script de controlar a interface na linha que digo que o MaxValue da vida é igual a vida inicial no status.

Este é o meu script da interface

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

public class ControlaInterface : MonoBehaviour
{
    private ControlaJogador scriptControlaJogador;
    public Slider SliderVidaJogador;

    private void Start()
    {
        scriptControlaJogador = GameObject.FindWithTag("Jogador").GetComponent<ControlaJogador>();
        SliderVidaJogador.maxValue = scriptControlaJogador.statusJogador.Vida;
        AtualizarSliderVidaJogador();
    }


    public void AtualizarSliderVidaJogador()
    {
        SliderVidaJogador.value = scriptControlaJogador.statusJogador.Vida;

    }
}

E este é meu script do status

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

public class Status : MonoBehaviour
{
    public int VidaInicial = 100;
    public int Vida;
    public float Velocidade = 5;

    private void Awake()
    {
        Vida = VidaInicial;
    }
}

Eu mudei de start para awake, mas só fez funcionar até o momento de ter que reiniciar o jogo.

2 respostas

Oi, Lucas, o certo é o de Status ficar com Awake e o de Interface com Start porque um depende da ordem do outro para rodar então você está correto.

Isso é um bug que vamos resolver na próxima parte do curso se não estou enganado.

Sobre o null a variável SliderVidaJogador está preenchida no inspector? Se você coloca um valor tipo 100 ele dá o mesmo erro?

solução!

Estava tendo esse mesmo problema, e utilizei a dica do professor. Quando substitui essa linha do Start por um valor fixo o problema pulou para a linha que muda os valores de status no método "AtualizarSliderVidaJogador", então o erro só poderia estar nos scripts do jogador. Descobri que o script da interface rodava antes do Jogador. Então substitui o Start do Jogador por um Awake e funcionou. Espero poder ajudar :) Retificando: Na aula 5 vídeo 2 o professor aconselha a não fazer oque eu fiz kk e da uma outra solução