Paski zdrowia
Lekcja 16 z 18 w kursie Gra Unity: Obrona wieżowa w Coddy.
Pasek nad każdym przeciwnikiem pokazuje, ile zdrowia mu pozostało. W prefabie przeciwnika składa się z dwóch cienkich sześcianów: ciemnego tła i zielonego wypełnienia z przodu. Szerokość wypełnienia to pozostałe zdrowie podzielone przez maksymalną wartość zdrowia, czyli liczba z zakresu od 0 do 1, a przeskalowanie jego osi x przez tę wartość sprawia, że pasek staje się krótszy. Sześcian skaluje się jednak względem środka, więc wypełnienie kurczyłoby się ku środkowi z obu stron. Wypełnienie znajduje się pod pustym obiektem pivot przy lewym brzegu paska, a skrypt skaluje zamiast niego pivot: wszystko pod nim kurczy się ku tej krawędzi, a pasek opróżnia się od prawej strony.
Ułamek trzeba obliczyć jako liczbę zmiennoprzecinkową. health / data.maxHealth dzieli dwie liczby całkowite, a C# odrzuca część ułamkową wyniku dzielenia całkowitego: 6 / 9 daje 0, więc pasek pokazywałby pusty stan już po pierwszym trafieniu. Rzutowanie najpierw jednej strony, (float)health / data.maxHealth, daje 0.67. Zbiornik na wodę, którego poziom rośnie w górę od pivota na dole:
float level = (float)water / capacity;
waterPivot.localScale = new Vector3(1f, level, 1f);Pełny pasek niczego nie mówi graczowi, więc początkowo jest ukryty: w prefabie jest nieaktywny, a pierwsze trafienie go włącza. Nieaktywny obiekt nie wykonuje Update, ale nadal można wywoływać jego metody. Każdy przeciwnik jest własną kopią prefabu i ma własny pasek.
Wyzwanie
Trudny- W
HealthBardodaj serializowaną zmienną Transformfill(Inspector przypisuje jej FillPivot paska) orazpublic void Show(float fraction), która włącza GameObject paska i skalujefillwzdłuż osi x do wartościfraction. - W
Enemydodaj serializowane polehealthBar(typu HealthBar). Za każdym razem, gdy TakeDamage odejmuje punkty zdrowia, wyświetl pozostałe zdrowie jako ułamekmaxHealth.
Każdy prefab przeciwnika ma swój pasek: nieaktywny, ze skryptem HealthBar, a wypełnienie znajduje się pod pivotem przy lewej krawędzi. Naciśnij Play i obserwuj paski, gdy wieże strzelają, a następnie kliknij Check.
Spróbuj swoich sił
using UnityEngine;
// Pojawi się później: pasek nad przeciwnikiem pokazujący, ile zdrowia mu pozostało.
public class HealthBar : MonoBehaviour
{
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.