Menu
CoddyTech

Pousser avec AddForce

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

Une fois qu’un objet possède un Rigidbody, la physique le déplace : tu arrêtes donc de modifier sa position et tu le propulses à 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.

Cette aéroglisseur (2 kg) est équipée d’un propulseur : tant que la flèche vers le haut est maintenue enfoncée, une force de thrust la pousse vers l’avant, selon +z. Avec une poussée de 12, sa vitesse augmente de 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 sont appliquées dans FixedUpdate(), que Unity appelle avant chaque étape de la physique, 50 fois par seconde (la leçon 4 explique pourquoi). La ligne ne contient pas de Time.deltaTime : 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 s’oppose au mouvement : une petite force peut donc ne pas déplacer du tout une boîte lourde.

challenge icon

Défi

Facile

Pousse le palet sur la patinoire sans frottement à l’aide de forces.

  1. Dans FixedUpdate(), lis float h = Input.GetAxis("Horizontal"); et float v = Input.GetAxis("Vertical");.
  2. Appelle rb.AddForce(new Vector3(h, 0, v) * push);, sans Time.deltaTime.

Appuie sur « Jouer », pousse le palet puis relâche : il continue de glisser. Ensuite, appuie sur « Vérifier ».

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 selon x, Vertical selon z
    }
}

Toutes les leçons de Physique et gameplay

Entraînez-vous par vous-même : Playground Unity