Menu
CoddyTech

Corps cinématiques

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

Les plateformes mobiles, les monte-charges et les portes doivent entrer en collision comme des objets solides, mais ils ne doivent ni tomber ni être bousculés par tout ce qui atterrit dessus. C’est un corps cinématique : définissez rb.isKinematic = true, et la gravité, les forces et les chocs ne le déplaceront plus. Son collider reste pris en compte : un corps dynamique (déplacé par la physique) le heurte comme un mur et se tient dessus comme sur le sol. Vous déplacez vous-même un corps cinématique avec rb.MovePosition.

Ce monte-charge monte à lift m/s jusqu’à atteindre top. MovePosition prend comme position celle à atteindre après cette étape ; le code ajoute donc la distance parcourue pendant une étape, en utilisant Time.fixedDeltaTime :

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

void FixedUpdate()
{
    if (rb.position.y < top)
    {
        rb.MovePosition(rb.position + Vector3.up * lift * Time.fixedDeltaTime);
    }
}

Pourquoi ne pas définir transform.position ? Cela téléporte l’objet, et la physique ne sait jamais qu’il a bougé : une caisse posée sur une plateforme coulissante resterait sur place au lieu de l’accompagner. MovePosition indique à la physique que le corps s’est déplacé jusqu’au nouvel emplacement pendant l’étape ; ce qu’il touche est donc correctement entraîné et poussé. AddForce n’a aucun effet sur un corps cinématique, et les corps cinématiques n’entrent jamais en collision avec les colliders statiques ni entre eux : seuls les corps dynamiques les heurtent.

challenge icon

Défi

Facile

La barge est suspendue au-dessus de la lave, et les flèches devraient la faire glisser vers la gauche et la droite le long de l’axe x à speed m/s (2 dans l’Inspector). Pour l’instant, son Rigidbody est ordinaire, alors elle tombe dans la lave.

  • Au démarrage du jeu, rends la barge cinématique afin qu’elle reste en l’air et que rien de ce qui la heurte ne puisse la repousser.
  • Déplace-la avec MovePosition dans FixedUpdate(), en utilisant l’axe Horizontal brut.

Appuie sur Play et fais glisser la barge, puis appuie sur Check.

Essayez vous-même

using UnityEngine;

public class Barge : MonoBehaviour
{
    public float speed = 2f;
    private Rigidbody rb;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
        // Rendre la barge cinématique
    }

    void FixedUpdate()
    {
        // Faire glisser la barge le long de x avec les flèches
    }
}
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