Menu
CoddyTech

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.

challenge icon

Wyzwanie

Trudny
  1. W HealthBar dodaj serializowaną zmienną Transform fill (Inspector przypisuje jej FillPivot paska) oraz public void Show(float fraction), która włącza GameObject paska i skaluje fill wzdłuż osi x do wartości fraction.
  2. W Enemy dodaj serializowane pole healthBar (typu HealthBar). Za każdym razem, gdy TakeDamage odejmuje punkty zdrowia, wyświetl pozostałe zdrowie jako ułamek maxHealth.

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
{
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Gra Unity: Obrona wieżowa