Menu
CoddyTech

Zonas de muerte

Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 18 de 63.

Una zona mortal es un disparador situado sobre un lugar al que el jugador no debe llegar: lava, pinchos o el espacio vacío bajo el nivel. Al entrar en ella, el jugador vuelve a un punto de aparición. Aquí lo hace el propio script de la lava, con el punto de aparición en un campo Transform configurado en el Inspector:

public Transform spawnPoint;

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

other.attachedRigidbody es el Rigidbody al que pertenece el collider que entra. Establecer transform.position teletransporta al jugador, que es lo que necesita una reaparición. Sin embargo, un Rigidbody conserva su velocidad durante el salto: un jugador que cayó a 10 unidades por segundo llega al punto de aparición todavía cayendo a 10, y uno que corrió hacia la lava sigue corriendo, directamente de vuelta a ella. Establecer linearVelocity en Vector3.zero hace que llegue completamente quieto. La comprobación de la etiqueta deja en su sitio cualquier otra cosa que caiga en la lava.

challenge icon

Desafío

Fácil

El jugador cruza un puente estrecho sobre el vacío, impulsado por fuerzas con las teclas de flecha; esa parte ya está escrita. Un activador etiquetado como KillZone ocupa el espacio de abajo, y una bandera etiquetada como Checkpoint, también un activador, está a mitad del puente. Añade puntos de reaparición al script del jugador:

  • Cuando empieza el juego, el punto de reaparición es donde está el jugador.
  • Al tocar un Checkpoint, la posición del jugador en ese momento se convierte en el nuevo punto de reaparición.
  • Al entrar en KillZone, el jugador vuelve al punto de reaparición y se queda quieto.

Pulsa Play y sal del puente, después pulsa Check.

Pruébalo tú mismo

using UnityEngine;

public class Player : MonoBehaviour
{
    public float force = 12f;
    Rigidbody body;
    Vector3 input;
    // respawn: lugar al que regresa el jugador

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

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

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

    // Checkpoint: recuerda dónde está el jugador. KillZone: vuelve a ese lugar, sin moverse.
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Física y jugabilidad