Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Quando eu colido com os inimigos, eles começam a rodar e eu fico "deslizando" como se eu tivesse sofrendo a força que eles fizeram em mim

Pra resolver isso, coloquei uma massa alta no meu personagem, mas parece errado. O código é o seguinte

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

public class Player : MonoBehaviour
{
    public float playerSpeed;
    private Rigidbody _rigidbody;
    private Animator _animator;
    float movHor, movVer;
    void Start()
    {
        _animator = gameObject.GetComponent<Animator>();
        _rigidbody = gameObject.GetComponent<Rigidbody>();
    }
    void Update()
    {
        movHor = Input.GetAxis("Horizontal");
        movVer = Input.GetAxis("Vertical");

        if (movHor != 0f || movVer != 0f)
        {
            isWalking(true);
        }
        else
        {
            isWalking(false);
        }
    }
    public void isWalking(bool isWalking)
    {
        _animator.SetBool("isWalking", isWalking);
    }
    void FixedUpdate()
    {
        _rigidbody.MovePosition(_rigidbody.position + (new Vector3(-movHor, 0, -movVer) * playerSpeed * Time.deltaTime));

    }
}
3 respostas

Tem algumas formas na verdade, algumas comuns seriam:

  • Set no Rigidbody como Kinemactic (apesar de que ele irá perder algumas caracteristicas);
  • Criar um Physics material sem bounciness;
  • Aumentar o Drag do Rigidbody;
  • Usar o OnCollisionExit ou Enter para zerar a velocity no momento da colisão;
  • Dar freeze nos componentes

Não tem muito só uma forma de corrigir esse problema, em outras partes do curso nós discutimos outros problemas relacionados ao Rigidbody e corrigimos também.

O Drag seria como uma força no ar que freia o corpo?

solução

Exatamente, é a resistência do ar, 0 sendo nenhuma e infinito sendo a máxima (faz ele parar assim que forças deixarem de ser aplicadas).