Poursuivre le joueur
Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 50 sur 63.
Un ennemi qui poursuit le joueur a besoin d’un Rigidbody : les murs l’arrêtent et il peut pousser et être poussé. La poursuite consiste simplement en une vélocité dirigée vers le joueur, définie une fois par étape physique. Ce zombie marche vers ce qui se trouve dans son emplacement 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 pointe du zombie vers le joueur. Sa coordonnée y est définie sur 0 pour que le zombie marche à plat lorsque le joueur se trouve plus haut ou plus bas, et normalized lui donne une longueur de 1 : le zombie marche donc à la vitesse speed, que le joueur soit à 2 unités ou à 20. La nouvelle vélocité conserve l’ancienne vélocité y, de sorte que la gravité continue de faire tomber le zombie lorsqu’il descend une marche. La rotation de son Rigidbody est gelée, il ne bascule donc pas en marchant.
Une vélocité que tu définis produit un marcheur qui démarre et tourne immédiatement. Un ennemi lourd peut plutôt être poussé avec AddForce dans le même FixedUpdate : il prend de la vitesse, conserve son élan et dépasse sa cible lorsque le joueur s’écarte. Évite de déplacer le Transform d’un poursuivant : cela le place dans un mur aussi facilement qu’ailleurs, et le moteur physique ne peut ensuite que le repousser hors du mur.
Défi
MoyenUn rocher roule à la poursuite du joueur. Écris le script Boulder sur le rocher, une balle avec un Rigidbody. L’Inspector lui fournit player (le joueur) et force (6). Le script Player est prêt : les flèches font marcher le joueur.
- À chaque étape physique, pousse le rocher vers le joueur avec
AddForce, avec une force deforce, que le joueur soit proche ou loin. - Pousse uniquement le long du sol, sans composante vers le haut ou vers le bas, même lorsque le joueur se tient sur le rebord.
- Ne déplace pas son Transform et ne bloque pas sa rotation : la friction le fait rouler.
Appuie sur Play, cours en cercle autour du rocher, puis clique sur Check.
Essayez vous-même
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()
{
// pousse le rocher vers le joueur, le long du sol
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Physique et gameplay
1Corps rigide
Gravité et massePousser avec AddForceSauter avec une impulsionFixedUpdate pour la physiqueVitesseCorps cinématiquesRécapitulatif : plateforme de lancement4Coroutines
InvoquerInvokeRepeating, CancelInvokeVotre première coroutineBoucles dans les coroutinesArrêter les coroutinesRécapitulatif : compte à rebours2Collisions
OnCollisionEnterQu’est-ce que j’ai touché ?Se briser à l’impactRester au solRebond et frictionFormes des collidersRécapitulatif : mur destructible5Projet : Course aux pièces
La balle roulanteDes pièces à ramasser3Déclencheurs
Colliders déclencheursOnTriggerEnterObjets à ramasserZones mortellesEntrée et sortieRécapitulatif : clé et porte6Lancers de rayons
Physics.RaycastRaycastHitVérifier le sol avec un rayonLayers et LayerMaskLigne de vueOverlapSphere et SphereCastRécapitulatif : fil-piège laser9Ennemis
Poursuivre le joueurPoursuivre à portéePatrouiller et poursuivreSanté et dégâtsReculRécapitulatif : chien de garde