Barres de vie
Leçon 22 sur 25 du cours Jeu Unity : défense de tours de Coddy.
Une barre au-dessus de chaque ennemi indique la santé qui lui reste. Dans le prefab de l’ennemi, elle est constituée de deux cubes fins : un fond sombre et un remplissage vert placé devant. La largeur du remplissage correspond à la santé restante divisée par la santé maximale, soit un nombre compris entre 0 et 1. La réduire selon cette valeur sur l’axe x le raccourcit. Cependant, un cube est mis à l’échelle autour de son centre : le remplissage rétrécirait donc vers le milieu, par les deux extrémités. Le remplissage se trouve sous un objet pivot vide, placé au bord gauche de la barre, et le script met plutôt le pivot à l’échelle : tout ce qui se trouve en dessous rétrécit vers ce bord, et la barre se vide par la droite.
La fraction doit être calculée avec des nombres flottants. health / data.maxHealth divise deux entiers, et C# supprime la partie fractionnaire d’une division entière : 6 / 9 donne 0, donc la barre indiquerait qu’elle est vide dès le premier coup. Convertir d’abord l’un des côtés, avec (float)health / data.maxHealth, donne 0,67. Un réservoir d’eau dont le niveau monte à partir de son pivot situé en bas :
float level = (float)water / capacity;
waterPivot.localScale = new Vector3(1f, level, 1f);Une barre pleine n’indique rien au joueur ; elle est donc cachée au départ : le prefab la rend inactive, et le premier coup l’active. Un objet inactif ne reçoit aucun Update, mais ses méthodes peuvent tout de même être appelées. Chaque ennemi est sa propre copie du prefab, avec sa propre barre.
Défi
DifficileAffiche une barre de santé au-dessus de chaque ennemi dès qu’il est touché.
- Dans
HealthBar, ajoute[SerializeField] private Transform fill;etpublic void Show(float fraction): active la barre et définisfill.localScale = new Vector3(fraction, 1f, 1f);. - Dans
Enemy, ajoute[SerializeField] private HealthBar healthBar;; après queTakeDamagea diminué la santé, appellehealthBar.Show((float)health / data.maxHealth);.
Appuie sur « Jouer » : les barres apparaissent et diminuent à mesure que les tours touchent les ennemis. Puis appuie sur « Vérifier ».
Essayez vous-même
using UnityEngine;
// Viendra plus tard : la barre au-dessus d’un ennemi qui indique les points de vie qu’il lui reste.
public class HealthBar : MonoBehaviour
{
}
Toutes les leçons de Jeu Unity : défense de tours
Entraînez-vous par vous-même : Playground Unity