Menu
CoddyTech

Santé et dégâts

Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 53 sur 63.

Les dégâts nécessitent deux scripts. Un script Health est attaché à tout ce qui peut être blessé et gère ses points de vie, tandis que 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 brise après trois coups, et 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 seul le script Health décide 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 composant Health, comme le sol ; les pics vérifient donc avant l’appel. TryGetComponent(out Health health) effectue la recherche et la vérification en un seul appel : il renvoie true et renseigne health uniquement si un composant est présent.

challenge icon

Défi

Moyen

Un pistolet d'entraînement tire sur un mannequin et un chevalier en armure. Le script Shooter sur le pistolet est prêt : les flèches gauche et droite le font tourner, et la barre d'espace tire une balle. Écris les deux scripts qui feront compter les impacts.

Health, sur le mannequin et le chevalier (l’Inspector définit hp et armor) :

  • Une méthode publique TakeDamage(int amount) : hp diminue de amount moins armor, mais toujours d’au moins 1.
  • Après chaque impact, affiche dans le journal le nom de l’objet et le hp restant, sous la forme Dummy hp: 2.
  • À 0 hp ou moins, détruis l’objet.

Bullet, sur chaque balle (l’Inspector définit damage à 2) :

  • Lorsque la balle touche quelque chose qui possède un Health, appelle son TakeDamage(damage).
  • Quelle que soit la chose touchée, y compris le mur, détruis la balle.

Appuie sur Play, renverse le mannequin et le chevalier, puis clique sur Check.

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 dans le journal ce qu’il reste, détruire à 0
    }
}
quiz iconTestez-vous

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