Zone letali
Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 18 di 63.
Una zona letale è un trigger posto in un'area che il giocatore non deve raggiungere: lava, spuntoni o il vuoto sotto il livello. Entrandoci, il giocatore viene riportato a un punto di spawn. In questo caso, se ne occupa lo script della lava, con il punto di spawn impostato nel campo Transform nell'Inspector:
public Transform spawnPoint;
void OnTriggerEnter(Collider other)
{
if (other.CompareTag("Player"))
{
other.transform.position = spawnPoint.position;
other.attachedRigidbody.linearVelocity = Vector3.zero;
}
}other.attachedRigidbody è il Rigidbody a cui appartiene il collider che entra. Impostare transform.position teletrasporta il giocatore, proprio ciò che serve per farlo ricomparire. Tuttavia, un Rigidbody mantiene la sua velocità durante il salto: un giocatore che è caduto a 10 unità al secondo arriva al punto di spawn continuando a cadere a 10 unità al secondo, e chi è corso nella lava continua a correre, dritto verso di essa. Impostare linearVelocity su Vector3.zero fa sì che arrivi fermo. Il controllo del tag lascia dov'è qualsiasi altra cosa cada nella lava.
Sfida
FacileIl giocatore attraversa uno stretto ponte sopra il vuoto, spinto da forze applicate con i tasti freccia; quella parte è già scritta. Un trigger con il tag KillZone riempie lo spazio sottostante, e una bandiera con il tag Checkpoint, anch'essa un trigger, si trova a metà del ponte. Aggiungi al script del giocatore la funzione di ripristino:
- Quando inizia il gioco, il punto di ripristino è dove si trova il giocatore.
- Toccando un
Checkpoint, la posizione del giocatore in quel momento diventa il nuovo punto di ripristino. - Entrando nella
KillZone, il giocatore torna al punto di ripristino, restando fermo.
Premi Play e scendi dal ponte, poi Check.
Provalo tu
using UnityEngine;
public class Player : MonoBehaviour
{
public float force = 12f;
Rigidbody body;
Vector3 input;
// respawn: il punto in cui il giocatore ricompare
void Start()
{
body = GetComponent<Rigidbody>();
}
void Update()
{
input = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"));
}
void FixedUpdate()
{
body.AddForce(input * force);
}
// Checkpoint: memorizza la posizione del giocatore. KillZone: lo riporta in quel punto, fermo.
}
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fisica e gameplay
1Corpo rigido
Gravità e massaSpingi con AddForceSalta con un impulsoFixedUpdate per la fisicaVelocitàCorpi cinematiciRiepilogo: piattaforma di lancio4Coroutine
InvokeInvokeRepeating, CancelInvokeLa tua prima coroutineCicli nelle coroutineInterrompere le coroutineRiepilogo: conto alla rovescia2Collisioni
OnCollisionEnterCosa ho colpito?Rompersi all'impattoRestare a terraRimbalzo e attritoForme dei ColliderRiepilogo: muro distruttibile5Progetto: Corsa alle monete
La palla rotolanteMonete da raccogliere