Menu
CoddyTech

Sauter avec une impulsion

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

AddForce prend un deuxième argument, un ForceMode, qui indique comment utiliser le vecteur. Sans lui, tu obtiens ForceMode.Force, une poussée qui dure un pas de physique et doit donc être ajoutée pas après pas. Un coup de pied, un saut ou une explosion se produit en une seule fois : c’est ForceMode.Impulse, toute la poussée appliquée d’un coup, ce qui modifie la vitesse de la valeur de l’impulsion divisée par la masse.

Ce ballon de football (0.5 kg) est frappé au clic. Sa vitesse augmente de (0, 2, 6) / 0.5 = (0, 4, 12) m/s au pas de physique suivant, puis la gravité et l’herbe prennent le relais :

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        rb.AddForce(new Vector3(0, 2, 6), ForceMode.Impulse);
    }
}

Une poussée ponctuelle peut être déclenchée depuis Update(), à l’image du clic : Unity la conserve et l’applique au pas de physique suivant. Les quatre modes diffèrent selon deux aspects : en une seule fois ou sur un pas, et avec ou sans prise en compte de la masse :

  • Force : sur un pas, divisée par la masse (moteurs, vent).
  • Acceleration : sur un pas, sans tenir compte de la masse.
  • Impulse : en une seule fois, divisée par la masse (coups de pied, sauts).
  • VelocityChange : en une seule fois, sans tenir compte de la masse : le vecteur est directement ajouté à la vitesse.
challenge icon

Défi

Facile

Fais sauter la grenouille une fois à chaque pression sur la barre d’espace.

  1. Sous le commentaire, écris if (Input.GetKeyDown(KeyCode.Space)).
  2. À l’intérieur, appelle rb.AddForce(Vector3.up * jumpImpulse, ForceMode.Impulse);, pour que la grenouille compte 2 kg.

Appuie sur « Jouer » et sur la barre d’espace : la grenouille bondit et retombe. Puis clique sur « Vérifier ».

Essayez vous-même

using UnityEngine;

public class FrogJump : MonoBehaviour
{
    public float jumpImpulse = 10f;
    private Rigidbody rb;

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

    void Update()
    {
        // Space : une seule impulsion vers le haut de jumpImpulse
    }
}

Toutes les leçons de Physique et gameplay

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