Insegui il giocatore
Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 50 di 63.
Un nemico che insegue il giocatore ha bisogno di un Rigidbody, così i muri lo fermano e lui può spingere ed essere spinto. L'inseguimento vero e proprio consiste in una velocità diretta verso il giocatore, impostata una volta per ogni passo fisico. Questo zombie cammina verso ciò che si trova nel suo slot player:
[SerializeField] private Transform player;
[SerializeField] private float speed = 2.5f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
Vector3 toPlayer = player.position - rb.position;
toPlayer.y = 0f;
Vector3 dir = toPlayer.normalized;
rb.linearVelocity = new Vector3(dir.x * speed, rb.linearVelocity.y, dir.z * speed);
}player.position - rb.position punta dallo zombie verso il giocatore. La sua y viene impostata a 0, così lo zombie cammina in piano quando il giocatore si trova più in alto o più in basso, e normalized gli dà lunghezza 1, così lo zombie cammina alla speed sia che il giocatore si trovi a 2 unità o a 20. La nuova velocità mantiene la vecchia velocità y, quindi la gravità continua a trascinare lo zombie giù da un gradino. Il Rigidbody ha Freeze Rotation attivato, così non si ribalta mentre cammina.
Una velocità impostata crea un inseguitore che parte e cambia direzione subito. Invece, un nemico pesante può essere spinto con AddForce nello stesso FixedUpdate: aumenta la velocità, mantiene il proprio slancio e supera il bersaglio quando il giocatore si sposta di lato. Evita di spostare il Transform di un inseguitore: così lo posizioni dentro un muro con la stessa facilità che altrove, e il motore fisico può solo spingerlo fuori in seguito.
Sfida
MedioUn masso rotola dietro al giocatore. Scrivi lo script Boulder sul masso, una palla con un Rigidbody. L’Inspector gli assegna player (il Player) e force (6). Lo script Player è pronto: le frecce fanno camminare il giocatore.
- A ogni passo della fisica, spingi il masso verso il giocatore con
AddForce, applicando una forza pari aforcesia che il giocatore sia vicino sia che sia lontano. - Spingilo solo lungo il terreno, senza componenti verso l’alto o verso il basso, anche quando il giocatore si trova sulla sporgenza.
- Non spostare il suo Transform né bloccarne la rotazione: l’attrito lo farà rotolare.
Premi Play, corri in cerchio intorno al masso, poi premi Check.
Provalo tu
using UnityEngine;
public class Boulder : MonoBehaviour
{
[SerializeField] private Transform player;
[SerializeField] private float force = 6f;
private Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void FixedUpdate()
{
// spingi il masso verso il giocatore, lungo il terreno
}
}
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 raccogliere3Trigger
Collider di triggerOnTriggerEnterOggetti da raccogliereZone letaliEntrata e uscitaRiepilogo: chiave e porta6Raycast
Physics.RaycastRaycastHitControllo del terreno con un RayLayer e LayerMaskLinea di vistaOverlapSphere e SphereCastRiepilogo: filo laser9Nemici
Insegui il giocatoreInsegui nel raggioPattuglia e inseguiSalute e danniContraccolpoRiepilogo: cane da guardia