Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro na Interface, Slider não funciona depois da refatoração

Fiz os codigós Igual ao da Aula e coloquei o Status publico porem a mensagem de erro aparece"NullReferenceException: Object reference not set to an instance of an object ControlaInterface.Start () (at Assets/Script/ControlaInterface.cs:15) ", poderia me dizer o que fiz de errado.

Controla Interface

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class ControlaInterface : MonoBehaviour
{
    private ControlaJogador scriptControlaJogador;
    public Slider SliderVidaJogador;
    // Start is called before the first frame update

    void Start()
    {
        scriptControlaJogador = GameObject.FindWithTag("Personagem").GetComponent<ControlaJogador>();

        SliderVidaJogador.maxValue = scriptControlaJogador.StatusJogador.Vida;
        AtualizaSlider();
    }

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

    }
    public void AtualizaSlider()
    {
        SliderVidaJogador.value = scriptControlaJogador.StatusJogador.Vida;
    }
}

E esse é o Controla Jogador

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

public class ControlaJogador : MonoBehaviour
{
    Vector3 direcao;
    public LayerMask MascaraChao;
    public GameObject TextoGameOver;
    public bool Vivo = true;
    private Rigidbody rigidbodyJogador;
    public ControlaInterface scriptControlaInterface;
    public AudioClip SomDeDano;
    private MovimentaJogador meuMovimentaJogador;
    private AnimacaoPersonagem animacaoJogador;
    public Status StatusJogador; 


    // Update is called once per frame
    void Start()
    {
        Time.timeScale = 1;
        rigidbodyJogador = GetComponent<Rigidbody>();

        meuMovimentaJogador = GetComponent<MovimentaJogador>();
        animacaoJogador = GetComponent<AnimacaoPersonagem>();
        StatusJogador = GetComponent<Status>();

    }
    void Update()
    {

        float eixoX = Input.GetAxis("Horizontal");
        float eixoZ = Input.GetAxis("Vertical");

        direcao = new Vector3(eixoX, 0, eixoZ);
        animacaoJogador.Movimentar(direcao.magnitude);


        if(Vivo==false)
        {
            if (Input.GetButtonDown("Fire1"))
            {
                SceneManager.LoadScene("game");

            }
        }
    }

    void FixedUpdate()
    {
        GetComponent<Rigidbody>().MovePosition
            (GetComponent<Rigidbody>().position +
            (direcao * StatusJogador.Velocidade * Time.deltaTime));
        meuMovimentaJogador.RotaçaoJogador(MascaraChao);

       }
    public void TomarDano(int dano)
    {
        StatusJogador.Vida -= dano;
        scriptControlaInterface.AtualizaSlider();
        ControlaAudio.intancia.PlayOneShot(SomDeDano);

        if (StatusJogador.Vida <= 0)
        {
            Time.timeScale = 0;
            TextoGameOver.SetActive(true);
            Vivo = false;
        }

    }


}


1 resposta
solução!

Simplemente abri no dia seguinte e o codigo estava funcionando

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