Falta pouco!

0 dias

0 horas

0 min

0 seg

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

[Bug] Meu personagem parou de andar

Meu personagem parou de se mexer, a animação vai só que ele não se move.
segue o codigo abaixo:
public class PlayerBehavior : MonoBehaviour
{
public float speed = 5;
public float JumpStrengh = 5;

[Header("Propriedades de ataque")]
[SerializeField] float attackRange = 1f;
[SerializeField] Transform attackPosition;
[SerializeField] LayerMask attackLayer;
[SerializeField]private int damage = 5;

private Rigidbody2D rigidbody2D;
private IsGroundedChecker isGroundedChecker;
float moveDirection;
Health health;



private void Awake()
{
    health.GetComponent<Health>();
    rigidbody2D = GetComponent<Rigidbody2D>();
    isGroundedChecker = GetComponent<IsGroundedChecker>();

    health.OnDead += HandlePlayerDeath;
    health.OnHurt += PlayHurtSound;
}


private void Start()
{
    GameManeger.Instance.InputManeger.OnJump += HandleJump;
}


private void Update()
{
    MovePlayer();
    flipPlayer();
}

private void HandleJump()
{
    if (isGroundedChecker.IsGrounded() == false) return;
    GameManeger.Instance.AudioManegar.PlaySFX(SFX.PlayerJump);
    rigidbody2D.linearVelocity += Vector2.up * JumpStrengh;
}


private void MovePlayer()
{
    
    moveDirection = GameManeger.Instance.InputManeger.Movement * Time.deltaTime * speed * 10;
    Vector2 vectorMoveDirection = new Vector2(moveDirection, rigidbody2D.linearVelocity.y);
    rigidbody2D.linearVelocity = vectorMoveDirection;

}
private void flipPlayer()
{
    if (moveDirection < 0)
    {
        transform.localScale = new Vector3(-1, 1, 1);
    }
    else if (moveDirection > 0)
    {
        transform.localScale = Vector3.one;
    }
}
void PlayHurtSound()
{
    GameManeger.Instance.AudioManegar.PlaySFX(SFX.PlayerHurt);
}
void HandlePlayerDeath()
{
    GameManeger.Instance.AudioManegar.PlaySFX(SFX.PlayerDeath);
    GetComponent<Collider2D>().enabled = false;
    rigidbody2D.constraints = RigidbodyConstraints2D.FreezeAll;
    GameManeger.Instance.InputManeger.DisablePlayerInput();
}
void attack()
{
    GameManeger.Instance.AudioManegar.PlaySFX(SFX.PlayerAttack);
    Collider2D[] hittedEnemis = Physics2D.OverlapCircleAll(attackPosition.position, attackRange, attackLayer);
    print("Dano dado");
    print(hittedEnemis);

    foreach (Collider2D hittedEnemy in hittedEnemis)
    {
        print("Cheking enemy");
        if (hittedEnemy.TryGetComponent(out Health enemyHealth))
        {
            enemyHealth.TakeDamage(damage);
            print("tomando dano");
        }
    }

}
void OnDrawGizmos()
{
Gizmos.color = Color.yellow;
Gizmos.DrawWireSphere(attackPosition.position, attackRange);
}

}

1 resposta
solução!

Olá Rodrigo! Como vai?

Esse problema do seu personagem está com a animação de movimento, mas não está se movendo fisicamente, pode ter algumas causas diferentes, então vamos dar uma olhada em algumas delas.

  1. Verifique o uso do linearVelocity: No método MovePlayer(), você está usando rigidbody2D.linearVelocity para definir o movimento. No entanto, a propriedade correta para definir a velocidade de um Rigidbody2D é velocity, não linearVelocity. Tente alterar rigidbody2D.linearVelocity para rigidbody2D.velocity no seu código:

    Vector2 vectorMoveDirection = new Vector2(moveDirection, rigidbody2D.velocity.y);
    rigidbody2D.velocity = vectorMoveDirection;
    
  2. Confirme se o InputManager está funcionando corretamente: Certifique-se de que o GameManeger.Instance.InputManeger.Movement está retornando valores diferentes de zero quando você pressiona as teclas de movimento. Você pode adicionar um Debug.Log(moveDirection); dentro do método MovePlayer() para verificar se o moveDirection está sendo atualizado corretamente.

  3. Verifique o Rigidbody2D: Certifique-se de que o Rigidbody2D do seu personagem não está com nenhuma restrição que impeça o movimento. Por exemplo, verifique se as Constraints no componente Rigidbody2D não estão configuradas para congelar a posição no eixo X.

  4. Problemas com o GameManager: Certifique-se de que o GameManeger.Instance está inicializado corretamente e que todos os componentes necessários estão atribuídos. Qualquer problema na inicialização pode afetar o funcionamento do seu jogo.

Espero que essas sugestões ajudem a resolver o problema do movimento do seu personagem.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.