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.
Défi
FacileAffiche le bouclier et les points de vie du chevalier sur deux barres.
- Écris
ShowBars():shieldBar.fillAmount = (float)shield / maxShield;, et fais de même pourhealthBaravechpetmaxHp. Appelle cette méthode dansStart(). - Dans
TakeDamage, le bouclier absorbeMathf.Min(amount, shield)et le reste est retiré dehp, sans jamais descendre sous 0. Appelle ensuiteShowBars().
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
1Texte à l’écran
Canvas et texteAfficher le scoreFormater les nombresUn compte à reboursRécapitulatif : compteur de vitesse4Scènes et niveaux
Charger une scèneRedémarrer le niveauNiveau suivantConserver entre les scènesRécapitulatif : sélection du niveau2Boutons et écrans
Boutons et onClickLambdasRelier les éléments dans l’InspectorActiver et désactiver les panneauxBarres de santéRécapitulatif : boutique d’améliorations5Sauvegarder avec PlayerPrefs
Enregistrer un nombreCharger avec une valeur par défautMeilleur scoreEnregistrer les paramètresRécapitulatif : les pièces à la banqueEntraînez-vous par vous-même : Playground Unity