Aujourd'hui, j'essaie de créer un contrôleur de caractères 2D avec unité (en utilisant la phisique). Je suis assez nouveau dans les moteurs physiques et il est vraiment difficile d'obtenir la sensation de contrôle que je recherche. Je serais vraiment heureux si quelqu'un pouvait suggérer une solution à un problème que je trouve:
Ceci est mon FixedUpdate en ce moment:
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);
}
J'essaie ici de déplacer simplement le corps rigide en appliquant une gravité et une force linéaire pour la gauche et la droite. J'ai mis en place un matériau physique qui ne fait aucun rebond et 0 frottement lors du déplacement et 1 frottement avec l'arrêt. Le problème principal est que j'ai des collisionneurs avec des pentes et que la vitesse change de monter (plus lentement), de descendre la pente (plus vite) et de marcher sur un collisionneur droit (normal). Comment cela pourrait-il être corrigé? Comme vous le voyez, j'applique toujours la même vitesse pour l'axe des x.
Pour le joueur, je l'ai configuré avec une sphère à la position des pieds qui est le corps rigide auquel j'applique des forces.
Toute autre astuce qui pourrait me faciliter la vie avec cela est la bienvenue :).
PD En rentrant chez moi, j'ai remarqué que je pouvais résoudre ce problème en appliquant une force constante parallèle à la surface sur laquelle le joueur marche, mais je ne sais pas si c'est la meilleure méthode.