Menu
CoddyTech

Garder la vitesse

Leçon 3 sur 19 du cours Jeu Unity : casse-briques de Coddy.

Une balle de casse-briques ne ralentit jamais. Son PhysicsMaterial fait l’essentiel du travail : une élasticité de 1 conserve toute la vitesse lors d’un rebond, et une friction de 0 empêche les murs de la ralentir. Les murs n’ont pas de matériau, et Unity fait par défaut la moyenne des valeurs des deux colliders : le 1 de la balle et le 0 d’un mur donnent un rebond à mi-vitesse. bounceCombine = Maximum et frictionCombine = Minimum permettent aux valeurs propres de la balle de l’emporter.

La physique n’est toujours pas exacte : une raquette en mouvement ajoute sa vitesse, et de petites erreurs s’accumulent au fil de centaines de rebonds. Ainsi, à chaque étape de la physique, la balle conserve sa direction et sa vitesse est réinitialisée :

rb.linearVelocity = rb.linearVelocity.normalized * 7f;

Une balle ralentie à 2 unités par seconde retrouve une vitesse de 7 à l’étape suivante.

challenge icon

Défi

Facile

Fais rebondir la balle indéfiniment à vitesse constante.

  1. Dans Awake() de Ball, crée new PhysicsMaterial("Bouncy") avec une élasticité de 1 et les deux frottements à 0, définis bounceCombine = PhysicsMaterialCombine.Maximum et frictionCombine = PhysicsMaterialCombine.Minimum ; applique-le à GetComponent<Collider>().material.
  2. Ajoute FixedUpdate() : si la balle a été lancée, rb.linearVelocity = rb.linearVelocity.normalized * speed;

Appuie sur « Jouer » et lance la balle : elle rebondit sur chaque mur sans ralentir. Puis appuie sur « Vérifier ».

Essayez vous-même

using UnityEngine;
using UnityEngine.InputSystem;

public class Ball : MonoBehaviour
{
    public Transform paddle;
    public float speed = 9f;

    Rigidbody rb;
    bool launched;

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

    void Update()
    {
        if (launched) return;
        transform.position = paddle.position + Vector3.up * 0.5f;
        if (Keyboard.current.spaceKey.wasPressedThisFrame) Launch(new Vector3(0.3f, 1f, 0f));
    }

    public void Launch(Vector3 direction)
    {
        launched = true;
        rb.linearVelocity = direction.normalized * speed;
    }
}

Toutes les leçons de Jeu Unity : casse-briques

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