Après un petit passage à vide et un détour sur UE4 (brrrrrr...) me revoilà sur Unity
En ce moment j'ai un petit projet 3D (de gros débutant) avec des joueurs qui se déplaceraient assez vite tout droit (style jeu de conduite j'imagine).
Mon soucis étant le suivant : le joueur est contrôlé par un rigidbody. Je voudrais que pendant qu'il avance, il puisse faire une esquive latérale grâce aux touches "Q" et "D". Donc quand il appuie, faire un déplacement très rapide à gauche ou à droite, tout en avancant et en regardant vers l'avant. Je ne savais pas bien quoi utiliser entre les MovePosition ou les forces, pour l'instant j'ai fini par utiliser ça lorsque la touche est appuyée :
Code : Tout sélectionner
rb.AddRelativeForce(Vector3.right * 40, ForceMode.Impulse);
Ce qui semble fonctionner. Maintenant je souhaiterai que le déplacement qui est très rapide s'estompe après x secondes. J'essaie d'utiliser une coroutine mais ne trouve rien qui me satisfait vraiment. En effet si l'accélération peut être très brutale, je voudrais une décélération très rapide mais un peu smooth (pour l'instant j'ajoute une force inverse après un laps de temps, et c'est très moche et saccadé ^^) :
Code : Tout sélectionner
rb.AddRelativeForce(-Vector3.right * 40, ForceMode.Impulse);
De plus j'ai vu des choses avec le drag, mais moi je souhaiterai que mon joueur puisse continuer d'avancer vers l'avant pendant son esquive latérale (ajouter un drag latéral je sais pas si cest possible mais ça devrait se rapprocher de ce que je recherche ^^). Je n'ai pas trouver comment arrêter en douceur cette force juste latérale? (j'ai essayé des choses avec rb.velocity.x mais je ne suis arrivé à rien je ne sais pas si la solution se trouve par là, ou si utiliser une force dans un premier temps est une erreur?). J'avais tenté ça aussi :
Code : Tout sélectionner
float sidewaysdragmultiplier = 1; //how fast do you want your object to slow down
Vector3 velocity = transform.InverseTransformDirection(rb.velocity);
rb.AddForce(transform.right * -velocity.x * sidewaysdragmultiplier);
Merci!