La raquette
Leçon 1 sur 16 du cours Jeu Unity : casse-briques de Coddy.
Dans ce cours, tu vas créer Brick Breaker en 3D : une raquette en bas, une balle qui rebondit entre les murs et un mur de briques à détruire. Chaque leçon ajoute une fonctionnalité : les briques, les vies, les niveaux, un écran de fin de partie et des bonus qui élargissent la raquette ou divisent la balle. La scène est prête : la caméra regarde le terrain de jeu de face et tout se déplace dans le plan x et y à z = 0. Pour l’instant, les scripts Paddle, Ball, Brick, GameManager et PowerUp sont de simples ébauches.
La raquette possède un Rigidbody cinématique, déplacé avec MovePosition dans FixedUpdate, afin que le moteur physique détecte son mouvement et que les rebonds de la balle puissent en tenir compte par la suite. Un corps cinématique n’est jamais arrêté par des colliders qui n’ont pas de Rigidbody, donc les murs latéraux ne le retiendront pas : le script le maintient à l’intérieur. Limiter le centre au niveau du mur laisserait la moitié de l’objet à l’intérieur du mur ; la limite correspond donc au mur moins la moitié de la taille de l’objet. Cette cabine d’ascenseur dans une cage allant de y = 0 à y = 12 applique cette limite sur y :
float halfHeight = transform.localScale.y / 2f;
Vector3 target = rb.position + Vector3.up * input * liftSpeed * Time.fixedDeltaTime;
target.y = Mathf.Clamp(target.y, 0f + halfHeight, 12f - halfHeight);
rb.MovePosition(target);Ici, input vaut 1 pour monter, -1 pour descendre et 0 autrement. Une cabine de 2 unités de haut garde son centre entre 1 et 11, de sorte que ses extrémités s’arrêtent exactement à 0 et à 12. Une primitive Cube mesure 1 unité de chaque côté : localScale.y correspond donc à la hauteur de la cabine, et la lire à chaque étape garantit que la limite reste correcte si la taille change pendant l’exécution du jeu.
Défi
FacileÉcrivez le déplacement de la raquette dans FixedUpdate() de Paddle :
- Créez un
float input: -1 lorsque la flèche gauche ou A est maintenue, 1 lorsque la flèche droite ou D est maintenue, 0 sinon. - Calculez la cible : la position du Rigidbody déplacée vers la droite de
input * speed * Time.fixedDeltaTime. - Limitez le x de la cible afin que les extrémités de la raquette s’arrêtent aux faces intérieures des murs,
-wallXetwallX. La largeur de la raquette esttransform.localScale.x. - Déplacez-la à cet endroit avec
rb.MovePosition.
Appuyez sur Play, faites glisser la raquette contre les deux murs, puis cliquez sur Check.
Essayez vous-même
using UnityEngine;
using UnityEngine.InputSystem;
public class Paddle : MonoBehaviour
{
public float speed = 14f;
public float wallX = 8f; // les faces intérieures des murs latéraux se trouvent à -wallX et wallX
Rigidbody rb;
void Awake()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// Déplace-toi avec les touches fléchées ou A et D, et reste entre les murs.
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.