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

Após refatorar o código de animação o jogo não roda mais

Estou a uma semana tentando resolver esse problema, como eu disse no título meu jogo não roda mais quando aperto Play depois que tentei refatorar a animação do personagem no novo scripts que criamos durante o curso. Seguindo a aula eu consegui fazer o personagem se mover porem ficou sem animação, aí na parte de animação em diante já não funcionou mais, quando eu clico em play aparece no console da unity a seguinte mensagem. Eu tenho que resolver isso porque está me atrapalhando a progredir no curso.

Se precisar baixar o projeto todo do jogo - > https://drive.google.com/file/d/1GjFdexxE0kaYJ8zl_FXOwae0S0EiCLmU/view?usp=sharing

NullReferenceException: Object reference not set to an instance of an object ControlaBoneco.Start () (at Assets/Scripts/ControlaBoneco.cs:27)

NullReferenceException: Object reference not set to an instance of an object ControlaBoneco.Update () (at Assets/Scripts/ControlaBoneco.cs:40)

Abaixo vou deixar os dois scrips relacionados a esse erro. OBS: eu mudei alguns nomes espero que nao esteja muito complicado para entender.

NOME DO SCRIPT -> CONTROLA BONECO = CONTROLA JOGADOR

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

public class ControlaBoneco : MonoBehaviour
{

    public float Velocity = 10;
    private Vector3 direction;
    public LayerMask FloorMask;
    public GameObject GameOver;
    public UiControl scriptUiControl;
    public AudioClip DamageSound;
    public float smoothing = 5;
    public float maxHealth;
    private PlayerMoviment myPlayerMoviment;
    private CharacterAnimation playerAnimation;
    public int Life = 100;

    private void Start()
    {
        Time.timeScale = 1;

        myPlayerMoviment = GetComponent<PlayerMoviment>();

        playerAnimation.GetComponent<CharacterAnimation>();

    }

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

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

        direction = new Vector3(eixoX, 0, eixoZ);

        playerAnimation.Movendo(direction.magnitude);

        if (Life <= 0)
        {
            if (Input.GetButtonDown("Fire1"))
            {
                SceneManager.LoadScene("jogo");
            }
        }
    }
    void FixedUpdate()
    {
        myPlayerMoviment.Movimentation(direction, Velocity);

        myPlayerMoviment.PlayerRotation(FloorMask);

            }

    public void TakeDamage(int damage)
    {
        Life -= damage;
        scriptUiControl.RefreshSliderLifePlayer();
        AudioControl.instance.PlayOneShot(DamageSound);
        if(Life <= 0)
        {
            Time.timeScale = 0;
            GameOver.SetActive(true);
        }

    }

}

SCRIPT DE ANIMAÇÃO

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

public class CharacterAnimation : MonoBehaviour
{
    public void AnimationMoviment (Vector3 direction)
    {
        myAnimator.SetFloat("moving", direction.magnitude);
    }

    public Animator myAnimator;
    public void Awake ()
    {
        myAnimator = GetComponent<Animator>();
    }
    public void Attack (bool state)
    {
        myAnimator.SetBool("Attack", state);
    }

    public void Movendo (float movimentValue)
    {
        myAnimator.SetFloat("correr", movimentValue);
    }
}
3 respostas
solução!

Oi, Euclides, tudo bem?

Na linha 27 do seu Start tem essa ação aqui:

playerAnimation.GetComponent<CharacterAnimation>();

Não era pra ser uma ação de igualdade? É por isso que travaria depois no Update também porque a variável não foi preenchida.

Cara seu curso é a minha porta de entrada para esse mundo da Unity e programação, é a primeira vez que trabalho com scripts, etc.... Depois de dias olhando para esse codigo eu nao notei esse simples " ponto final" depois de "playerAnimation"... geez... Obrigado já foi resolvido, voltarei a progredir no curso agora.

Espero que esteja curtindo, bons estudos!