Menu
CoddyTech

Barres de santé

Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 10 sur 60.

Une barre qui se vide est une image d’interface dont le Type d’image est défini sur Filled. Ce paramètre apparaît une fois qu’une Image source est attribuée à l’image ; si la valeur est None, l’Inspector le masque. La méthode de remplissage Horizontal avec l’origine de remplissage Left rétrécit la barre vers son extrémité gauche, et fillAmount, de 0 à 1, indique la proportion qui est dessinée. Une image sombre placée derrière montre la partie vide. Unity limite fillAmount : 1.4 dessine une barre pleine et -0.2 une barre vide.

fillAmount correspond à la proportion de santé restante : la santé divisée par son maximum. Avec des champs int, il s’agit d’une division entière, et 350 / 500 vaut 0 ; convertis donc d’abord un des deux côtés en float. Image se trouve dans UnityEngine.UI. Cette barre de boss est mise à jour après chaque coup :

public Image bossBar;
public int bossMaxHp = 500;
private int bossHp = 500;

public void Hit(int damage)
{
    bossHp = Mathf.Max(bossHp - damage, 0);
    bossBar.fillAmount = (float)bossHp / bossMaxHp;   // 350 / 500 = 0.7
}

La couleur de la barre peut aussi suivre la santé : bossBar.color = Color.Lerp(Color.red, Color.green, bossBar.fillAmount); est verte lorsque la barre est pleine et devient rouge à mesure qu’elle se vide.

challenge icon

Défi

Facile

Affiche le bouclier et les points de vie du chevalier sur deux barres.

  1. Écris ShowBars() : shieldBar.fillAmount = (float)shield / maxShield;, et fais de même pour healthBar avec hp et maxHp. Appelle cette méthode dans Start().
  2. Dans TakeDamage, le bouclier absorbe Mathf.Min(amount, shield) et le reste est retiré de hp, sans jamais descendre sous 0. Appelle ensuite ShowBars().

Appuie sur « Jouer » et marche sur les pics : la barre du bouclier se vide en premier. Puis appuie sur « Vérifier ».

Essayez vous-même

using UnityEngine;
using UnityEngine.UI;

public class Knight : MonoBehaviour
{
    public Image healthBar;
    public Image shieldBar;
    public int maxHp = 80;
    public int maxShield = 40;
    private int hp;
    private int shield;

    void Start()
    {
        hp = maxHp;
        shield = maxShield;
        // Remplir les deux barres
    }

    public void TakeDamage(int amount)
    {
        // Le bouclier absorbe ce qu’il peut ; le reste est déduit de hp, sans descendre en dessous de 0. Puis afficher les deux barres.
    }
}

Toutes les leçons de Créer de vrais jeux

Entraînez-vous par vous-même : Playground Unity