Menu
CoddyTech

L’arène

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

Ce chapitre permet de créer Arena Escape. Tu esquives des chasseurs dans une arène entourée de murs tandis que des vagues de chasseurs affluent ; trois coups mettent fin à la partie, et une sortie s’ouvre une fois la dernière vague éliminée. Le jeu comprend cinq scripts, présents dans le projet dès le départ : Player, Hunter, Spawner, Health et Exit. Les quatre derniers sont vides pour l’instant, et chaque leçon en remplira un.

Le joueur se déplace à l’aide de forces plutôt qu’en définissant une vitesse, de sorte que la poussée d’un chasseur s’ajoute à son mouvement au lieu de l’annuler. Une poussée seule l’accélérerait sans fin ; linearDamping réduit donc sa vitesse d’une certaine quantité à chaque étape : une poussée constante finit par atteindre un équilibre à une vitesse maximale d’environ l’accélération divisée par l’amortissement. Ce traîneau aéroglisseur avance tant que la barre d’espace est maintenue enfoncée :

[SerializeField] private float accel = 12f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
    rb.linearDamping = 2f;
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.Space))
    {
        rb.AddForce(transform.forward * accel, ForceMode.Acceleration);
    }
}

Avec une accélération de 12 et un amortissement de 2, le traîneau atteint une vitesse maximale proche de 6 unités par seconde. Lorsque la barre d’espace est relâchée, l’amortissement l’arrête au lieu de le laisser glisser sans fin. ForceMode.Acceleration ne tient pas compte de la masse : un traîneau lourd accélère exactement comme un traîneau léger. Le collider du traîneau utilise un PhysicsMaterial sans friction : avec la friction du sol en plus de l’amortissement, sa vitesse maximale serait plus faible.

challenge icon

Défi

Moyen

Démarre Arena Escape : le joueur glisse sous l’effet des forces.

  1. Dans Start(), après la ligne GetComponent, définis rb.linearDamping = accel / topSpeed; pour que la vitesse se stabilise près de topSpeed.
  2. Dans FixedUpdate(), construis new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")).
  3. Passe son normalized multiplié par accel à rb.AddForce avec ForceMode.Acceleration.

Appuie sur « Jouer » et glisse dans l’arène. Puis appuie sur « Vérifier ».

Essayez vous-même

using UnityEngine;

public class Player : MonoBehaviour
{
    [SerializeField] private float accel = 18f;
    [SerializeField] private float topSpeed = 6f;
    private Rigidbody rb;

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

    void FixedUpdate()
    {
        // régler l’amortissement, puis déplacer le joueur avec les touches fléchées
    }
}

Toutes les leçons de Physique et gameplay

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