Zonas letales
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 19 de 71.
Una zona mortal es un activador colocado sobre un lugar al que el jugador no debe llegar: lava, pinchos o el vacío bajo el nivel. Al entrar en ella, el jugador vuelve a un punto de aparición. En este caso, el propio script de la lava lo hace, 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 colisionador que entra. Asignar un valor a transform.position teletransporta al jugador, que es lo que se necesita para reaparecer. 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 hacia ella otra vez. Asignar Vector3.zero a linearVelocity hace que llegue sin moverse. La comprobación de la etiqueta deja en su sitio cualquier otra cosa que caiga en la lava.
Desafío
FácilHaz que el jugador reaparezca. Este script está en el jugador, así que mueve transform y body, no other.
- En
Start(), asigna al campoVector3 respawnel valortransform.position. - En
OnTriggerEnter(Collider other), cuandoother.CompareTag("Checkpoint"), asignarespawn = transform.position;. - Cuando
other.CompareTag("KillZone"), asignatransform.position = respawn;ybody.linearVelocity = Vector3.zero;.
Pulsa «Jugar» y sal caminando del puente. Después, pulsa «Comprobar».
Pruébalo tú mismo
using UnityEngine;
public class Player : MonoBehaviour
{
public float force = 12f;
Rigidbody body;
Vector3 input;
// reaparición: lugar al que vuelve 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 y se queda quieto.
}
Todas las lecciones de Física y jugabilidad
1Cuerpo rígido
Gravedad y masaEmpujar con AddForceSaltar con un impulsoFixedUpdate para físicaVelocidadCuerpos cinemáticosRepaso: plataforma de lanzamiento4Corrutinas
InvocarInvokeRepeating y CancelInvokeTu primera corrutinaBucles en corrutinasDetener corrutinasRepaso: cuenta regresiva10Proyecto: Escape de la arena
La arenaCazadores2Colisiones
OnCollisionEnter¿Qué golpeé?Romper al impactarDe pie sobre el sueloRebote y fricciónFormas de los collidersRepaso: muro destructible5Proyecto: Carrera de Monedas
La pelota rodanteMonedas para recoger3Disparadores
Colisionadores de tipo triggerOnTriggerEnterObjetos coleccionablesLas cajas guardan el restoZonas letalesEntrada y salidaRepaso: llave y puertaPractica por tu cuenta: Playground de Unity