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

Herói tomando dano do nada

Meu boneco está bem longe dos zumbis mas eu tomo dano, as vezes só escuto a musica do tomar o dano perco a vida e nem aparece na barra de vida... https://photos.app.goo.gl/43z6dbAWr5t5XNSo8

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

public class ControlaJogador : MonoBehaviour
{
    public float velocidade = 10;
    public LayerMask mascaraChao;
    public GameObject TextoGameOver;


    private Vector3 direcao;
    private Rigidbody rigidbodyJogador;
    private Animator animatorJogador;
    public int Vida = 100;
    public ControlaInterface ScriptControlaInterface;
    public AudioClip SomDeDano;

    private void Start()
    {
        Time.timeScale = 1;
        rigidbodyJogador = GetComponent<Rigidbody>();
        animatorJogador = GetComponent<Animator>();
    }

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

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

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

        if (direcao != Vector3.zero)
        {
            animatorJogador.SetBool("Movendo", true);
        }
        else
        {
            animatorJogador.SetBool("Movendo", false);
        }

        if (Vida <= 0)
        {
            if (Input.GetButtonDown("Fire1"))
            {
                SceneManager.LoadScene("game");
            }
        }

    }



    void FixedUpdate()
    {
        rigidbodyJogador.MovePosition(rigidbodyJogador.position +
            (direcao * velocidade * Time.deltaTime));


        Ray raio = Camera.main.ScreenPointToRay(Input.mousePosition);
        Debug.DrawRay(raio.origin, raio.direction * 100, Color.red);
        RaycastHit impacto;

        if (Physics.Raycast(raio, out impacto, 100, mascaraChao))
        {
            Vector3 posicaoMiraJogador = impacto.point - transform.position;
            posicaoMiraJogador.y = transform.position.y;

            Quaternion novaRoatacao = Quaternion.LookRotation(posicaoMiraJogador);
            rigidbodyJogador.MoveRotation(novaRoatacao);
        }
    }



    public void TomarDano(int dano)
    {
        Vida -= dano;
        ScriptControlaInterface.AtualizaSliderVidaJogador();
        ControlaAudio.instancia.PlayOneShot(SomDeDano);


        if (Vida <= 0)
        {
            Time.timeScale = 0;
            TextoGameOver.SetActive(true);

        }
    }
}
3 respostas

Oi, Danilo tudo bem?

Talvez esse erro nem seja relacionado a código mas na forma com que as animações estão construídas porque como o Dano é um evento de animação a animação pode estar rodando por algum motivo.

Você pode conferir no Animator se tá tudo certinho?

Qualquer coisa faz um .zip do seu projeto e sobe num GoogleDrive, Dropbox, ou coisa assim (lembra de tornar o arquivo publico) e manda pra gente o link aqui ? Aí damos uma olhada com calma :)

Segue o link do projeto, parece normal o animator.

https://drive.google.com/file/d/1abq4MN93orf-R34rlsa9b0tbkHElOL-C/view?usp=sharing

solução!

Oi, Danilo, tudo bem?

No script de ControlaInimigo na linha da distancia ele estava usando Vector2.Distance ao invés de Vector3.distance isso faz com que o calculo não seja calculado corretamente.

Também recomendo aumentar um pouco a distancia para algo como 3 :)

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