Menu
CoddyTech

Pousser avec AddForce

Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 2 sur 63.

Une fois qu’un objet a un Rigidbody, la physique le déplace : tu arrêtes donc de modifier sa position et tu le pousses à la place. rb.AddForce(force) pousse le corps avec une force, un Vector3 exprimé en newtons. Une force ne définit pas une vitesse : elle accélère le corps tant que tu continues à l’appliquer, à raison de la force divisée par la masse chaque seconde. Arrête de pousser et le corps conserve sa vitesse.

Ce véhicule aéroglisseur (2 kg) est équipé d’un propulseur : tant que la flèche vers le haut est maintenue, une force de thrust le pousse vers l’avant, le long de +z. Avec une poussée de 12, il gagne 12 / 2 = 6 m/s chaque seconde :

public float thrust = 12f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.UpArrow))
    {
        rb.AddForce(Vector3.forward * thrust);
    }
}

Les forces s’appliquent dans FixedUpdate(), que Unity appelle avant chaque étape physique, 50 fois par seconde (la leçon 4 explique pourquoi). Il n’y a pas de Time.deltaTime sur cette ligne : AddForce répartit déjà la force sur la durée de l’étape, et la multiplier par Time.deltaTime rendrait la poussée 50 fois plus faible. Au sol, le frottement exerce une force opposée : une petite force peut donc ne pas déplacer du tout une lourde boîte.

challenge icon

Défi

Facile

Le palet sur la patinoire possède un Rigidbody, et la glace n’a pas de friction. Pousse-le avec les flèches : l’axe Horizontal le pousse le long de x et l’axe Vertical le long de z, avec une force de push (4 dans l’Inspector).

Pousse-le uniquement avec des forces, afin qu’il continue de glisser lorsque tu le relâches. Appuie sur Play, dirige le palet sur la patinoire, puis clique sur Check.

Essayez vous-même

using UnityEngine;

public class PuckPusher : MonoBehaviour
{
    public float push = 4f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // Pousse le palet : Horizontal le long de x, Vertical le long de z
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Physique et gameplay