Barres de vie
Leçon 16 sur 18 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
Difficile- Dans
HealthBar, ajoute un Transform sérialiséfill(l’inspecteur associe le FillPivot de la barre) etpublic void Show(float fraction), qui active le GameObject de la barre et metfillà l’échelle defractionsur l’axe x. - Dans
Enemy, ajoute un champ sérialiséhealthBar(un HealthBar). Chaque fois que TakeDamage retire de la santé, affiche la santé restante sous forme de fraction demaxHealth.
Chaque prefab d’ennemi possède sa barre : inactive, avec le script HealthBar, et le remplissage sous un pivot situé au bord gauche. Appuie sur Play et observe les barres pendant que les tours tirent, puis clique sur Check.
Essayez vous-même
using UnityEngine;
// Viendra plus tard : la barre au-dessus d'un ennemi qui indique les points de vie qui lui restent.
public class HealthBar : MonoBehaviour
{
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.