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

Meu personagem esta tendo delay ao soltar o botão de andar

Já verifiquei os exit time e não é isso, após passar para um script externo isso aconteceu, não sei o que pode estar dando errado. Acredito ser culpa do normalized, fiz alguns testes e retirando ele do codigo dentro do script faz com que o boneco pare de andar com delay.

Codigo do ControlaJogador

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

public class ControlaJogador : MonoBehaviour
{
    public float Velocidade = 10;
    public LayerMask MascaraChao;
    private Vector3 direcao;
    public GameObject TextoGameOver;
    private Animator animatorJogador;
    public int Vida = 100;
    public ControlaInterface ScriptControlaInterface;
    public AudioClip SomDeDano;
    private MovimentoPersonagem movimentoJogador;

    private void Start()
    {
        Time.timeScale = 1;
        animatorJogador = GetComponent<Animator>();
        movimentoJogador = GetComponent<MovimentoPersonagem>();
    }
    void Update()
    {
        float eixoX = Input.GetAxis("Horizontal");
        float eixoZ = Input.GetAxis("Vertical");

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

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

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

    void FixedUpdate()
    {
        movimentoJogador.Movimentar(direcao, Velocidade);

        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;

            movimentoJogador.Rotacao(PosicaoMiraJogador);
        }
    }

    public void TomarDano(int dano)
    {
        Vida -= dano;
        ControlaAudio.instancia.PlayOneShot(SomDeDano);
        ScriptControlaInterface.AtualizarVidaJogador();
        if (Vida <= 0)
        {
            Time.timeScale = 0;
            TextoGameOver.SetActive(true);
        }
    }
}

Codigo MovimentaJogador

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

public class MovimentoPersonagem : MonoBehaviour
{
    private Rigidbody meuRigidbody;

    private void Awake ()
    {
        meuRigidbody = GetComponent<Rigidbody>();
    }

    public void Movimentar(Vector3 direcao, float velocidade)
    {
        meuRigidbody.MovePosition(meuRigidbody.position + 
            (direcao.normalized * velocidade * Time.deltaTime));
    }

    public void Rotacao (Vector3 direcao)
    {
        Quaternion NovaRotacao = Quaternion.LookRotation(direcao);
        meuRigidbody.MoveRotation(NovaRotacao);
    }
}
1 resposta
solução!

Já resolvi

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