Page 1 sur 1

[RESOLU] [MY-AL] Combiner RB Velocity et AddForce

Publié : 16 Jan 2019 11:41
par WilfreGD
Bonjour a tous!
J'ai tenté de poser cette question sur les forums officiels mais sans réponse, du coup je me tourne vers vous.
Que ce soit en 2D ou en 3D, j'utilise Rigidbody.velocity pour déplacer mon personnage. Cela évite l'accélération et permet des contrôles instantanés. Mais justement, lorsque les touches de déplacement ne sont plus pressées, la vélocité est mise a 0, donc le joueur s'arrête. J'aimerais ajouter un AddForce pour pousser le joueur vers l’arrière, même quand les touches ne sont plus préssées. Mais l'AddForce est annulé parce que la vélocité est forcée a 0 et est plus forte que la fonction AddForce. Est-il possible de combiner les deux solutions ?

Voici mon code (2D) :

Code : Tout sélectionner

 void FixedUpdate()
{
	//Mouvement horizontal
        float horizontal = Input.GetAxis("Horizontal");
        rb2D.velocity = new Vector2(horizontal * speed, rb2D.velocity.y);

        //Saut
        if (Input.GetKeyDown(KeyCode.Space))
            rb2D.AddForce(new Vector2(0, jumpForce), ForceMode2D.Impulse);

        //Poussé par un enemy (debug)
        if (Input.GetKeyDown(KeyCode.T))
            rb2D.AddForce(new Vector2(-pushForce, 0), ForceMode2D.Impulse);
}
Merci bien!

Re: [MY-AL] Combiner RB Velocity et AddForce

Publié : 16 Jan 2019 11:49
par boubouk50
Il est déconseillé d'utiliser directement la vélocité pour les raisons évidentes qui te posent problème.
Tu pourrais utiliser une condition pour éviter cela, genre quand les inputs sont à zéro, tu passes en AddForce, sinon tu restes en Vélocité.
Quoiqu'il en soit, le AddForce joue sur la vélocité, si tu l'affectes sans prendre en compte les forces présentes, alors les forces deviennent inutiles. Il faudrait plutôt revoir ton système pour n'utiliser que les forces.

Re: [MY-AL] Combiner RB Velocity et AddForce

Publié : 07 Fév 2019 17:08
par WilfreGD
Merci, tout fonctionne. J'ai effectivement pris en compte les forces existantes et utilisé AddForce uniquement. Tout est une question de valeur après ça où je dois être très précis sur la force appliquée mais ça fonctionne!