Menu
CoddyTech

Zones mortelles

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

Une zone mortelle est un déclencheur placé au-dessus d’un endroit que le joueur ne doit pas atteindre : de la lave, des pics ou le vide sous le niveau. En y entrant, le joueur est renvoyé à un point d’apparition. Ici, le script de la lave s’en charge, avec le point d’apparition dans un champ Transform défini dans l’Inspector :

public Transform spawnPoint;

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        other.transform.position = spawnPoint.position;
        other.attachedRigidbody.linearVelocity = Vector3.zero;
    }
}

other.attachedRigidbody est le Rigidbody auquel appartient le collider qui entre dans la zone. Définir transform.position téléporte le joueur, ce qui est nécessaire pour le faire réapparaître. Mais un Rigidbody conserve sa vitesse pendant le saut : un joueur qui est tombé à 10 unités par seconde arrive au point d’apparition en continuant de tomber à 10, et celui qui a couru dans la lave continue de courir et y retourne tout droit. Définir linearVelocity sur Vector3.zero le fait arriver sans bouger. La vérification du tag laisse tout autre objet qui tombe dans la lave à sa place.

challenge icon

Défi

Facile

Fais réapparaître le joueur. Ce script est attaché au joueur, il déplace donc transform et body, pas other.

  1. Dans Start(), définis le champ Vector3 respawn sur transform.position.
  2. Dans OnTriggerEnter(Collider other), lorsque other.CompareTag("Checkpoint"), définis respawn = transform.position;.
  3. Lorsque other.CompareTag("KillZone"), définis transform.position = respawn; et body.linearVelocity = Vector3.zero;.

Appuie sur « Jouer » et tombe du pont. Puis appuie sur « Vérifier ».

Essayez vous-même

using UnityEngine;

public class Player : MonoBehaviour
{
    public float force = 12f;
    Rigidbody body;
    Vector3 input;
    // respawn : l’endroit où le joueur réapparaît

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

    void Update()
    {
        input = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"));
    }

    void FixedUpdate()
    {
        body.AddForce(input * force);
    }

    // Checkpoint : mémoriser la position du joueur. KillZone : retourner à cet endroit, sans bouger.
}

Toutes les leçons de Physique et gameplay

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