Santé et dégâts
Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 55 sur 71.
Les dégâts nécessitent deux scripts. Un script Health se trouve sur tout objet susceptible d’être endommagé et gère ses points de vie ; ce qui inflige les dégâts trouve ce script et appelle une méthode dessus. Voici le script Health d’une caisse qui se casse après trois coups, ainsi que celui de pics qui blessent tout ce qui atterrit dessus :
public class Health : MonoBehaviour
{
[SerializeField] private int hp = 3;
public void TakeDamage(int amount)
{
hp -= amount;
if (hp <= 0)
{
Destroy(gameObject);
}
}
}public class Spikes : MonoBehaviour
{
void OnCollisionEnter(Collision collision)
{
Health health = collision.gameObject.GetComponent<Health>();
if (health != null)
{
health.TakeDamage(1);
}
}
}TakeDamage est public, donc les autres scripts peuvent l’appeler, et c’est le seul code qui modifie hp. Les pics, les balles et la lave appellent tous la même méthode, et le script Health décide à lui seul de ce que signifie 0 : détruire la caisse, terminer la partie ou jouer une animation de mort. Chaque script se trouve dans son propre fichier, nommé d’après sa classe.
GetComponent<Health>() renvoie null pour les objets qui n’ont pas de script Health, comme le sol ; les pics vérifient donc avant d’appeler la méthode. TryGetComponent(out Health health) effectue la recherche et la vérification en un seul appel : il renvoie true et renseigne health uniquement si le composant existe.
Défi
MoyenFais en sorte que chaque tir compte. Bullet est prêt et appelle TakeDamage(2) sur ce qu’il touche.
- Dans
Health, complèteTakeDamage(int amount): soustraisMathf.Max(amount - armor, 1)dehp. - Affiche dans le journal
name + " hp: " + hp, par exempleDummy hp: 2. - Quand
hp <= 0, appelleDestroy(gameObject);.
Appuie sur « Jouer » et tire deux fois sur le mannequin : le journal affiche Dummy hp: 2, puis il disparaît. Ensuite, appuie sur « Vérifier ».
Essayez vous-même
using UnityEngine;
public class Health : MonoBehaviour
{
[SerializeField] private int hp = 4;
[SerializeField] private int armor = 0;
public void TakeDamage(int amount)
{
// retirer amount moins armor (au moins 1), afficher ce qu'il reste dans le journal, détruire à 0
}
}
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 à rebours7Rotation
Angles d’EulerQuaternionsRegardez dans la direction où vous vous déplacezTourner en douceurRécapitulatif : tourelle10Projet : Évasion de l’arène
L’arèneLes chasseurs2Collisions
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 à ramasserLes caisses gardent le resteZones mortellesEntrée et sortieRécapitulatif : clé et porteEntraînez-vous par vous-même : Playground Unity