Hoje estou tentando criar um controlador de caracteres 2D com unidade (usando phisics). Eu sou bastante novo nos motores físicos e é realmente difícil ter a sensação de controle que estou procurando. Ficaria muito feliz se alguém pudesse sugerir solução para um problema que estou encontrando:
Este é o meu FixedUpdate agora:
public void FixedUpdate()
{
Vector3 v=new Vector3(0,-10000*Time.fixedDeltaTime,0);
_body.AddForce(v);
v.y=0;
if(state(MovementState.Left))
{
v.x=-_walkSpeed*Time.fixedDeltaTime+v.x;
if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=-_maxWalkSpeed;
}
else if(state(MovementState.Right))
{
v.x= _walkSpeed*Time.fixedDeltaTime+v.x;
if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=_maxWalkSpeed;
}
_body.velocity=v;
Debug.Log("Velocity: "+_body.velocity);
}
Estou tentando aqui apenas mover o corpo rígido, aplicando uma gravidade e uma força linear para esquerda e direita. Eu configurei um material físico que não faz saltar e 0 atrito quando se move e 1 atrito com o suporte parado. O principal problema é que tenho colididores com declives e a velocidade muda de subir (mais devagar), descer a ladeira (mais rápido) e andar em um colisor reto (normal). Como isso poderia ser corrigido? Como você vê, eu estou aplicando sempre a mesma velocidade para o eixo x.
Para o jogador, tenho uma configuração com uma esfera na posição dos pés, que é o corpo rígido ao qual estou aplicando forças.
Qualquer outra dica que possa facilitar minha vida com isso é bem-vinda :).
PD Ao voltar para casa, notei que poderia resolver isso aplicando uma força constante paralela à superfície que o jogador está andando, mas não sei se é o melhor método.