Menu
CoddyTech

L’arène

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

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

Le joueur se déplace grâce à des forces plutôt qu'en définissant sa vitesse, si bien que la poussée d'un chasseur s'ajoute à son mouvement au lieu de l'annuler. Une poussée seule l'accélérerait indéfiniment ; linearDamping réduit donc sa vitesse d'une certaine quantité à chaque étape : une poussée constante finit par atteindre une vitesse maximale correspondant à 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 d'environ 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 indéfiniment. 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 possède un PhysicsMaterial sans frottement : avec le frottement du sol en plus de l'amortissement, sa vitesse maximale serait plus faible.

challenge icon

Défi

Moyen

Démarre Arena Escape avec le joueur. L’inspecteur attribue au script Player les valeurs accel (18) et topSpeed (6). Le joueur a une masse de 2 et un matériau sans friction, et les quatre autres scripts restent vides pour le moment.

  • Dans Start, définis le linearDamping du Rigidbody à accel / topSpeed, afin que le joueur atteigne une vitesse constante d’environ topSpeed.
  • À chaque étape physique, pousse le joueur à l’aide des flèches : gauche et droite le long de l’axe x, et haut et bas le long de l’axe z, en utilisant ForceMode.Acceleration et une accélération de accel.
  • Normalise la direction indiquée par les flèches afin qu’un déplacement en diagonale ne soit pas plus rapide qu’un déplacement en ligne droite.

Appuie sur Play et glisse dans l’arène, puis clique sur Check.

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ègle l'amortissement, puis déplace le joueur avec les touches fléchées
    }
}
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