Paski zdrowia
Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 10 z 60.
Pasek, który się opróżnia, to obraz UI z opcją Image Type ustawioną na Filled. To ustawienie pojawia się, gdy obraz ma przypisane Source Image; jeśli wartość to None, Inspector je ukrywa. Fill Method ustawione na Horizontal, a Fill Origin na Left sprawia, że pasek skraca się w kierunku lewego końca, a fillAmount, od 0 do 1, określa, jaka jego część jest rysowana. Ciemny obraz umieszczony pod nim pokazuje pustą część. Unity ogranicza wartość fillAmount, więc 1.4 rysuje pełny pasek, a -0.2 pusty.
fillAmount określa pozostałą część zdrowia: zdrowie podzielone przez jego maksimum. W przypadku pól typu int jest to dzielenie całkowite, a 350 / 500 daje 0, dlatego najpierw rzutuj jedną ze stron na float. Image znajduje się w UnityEngine.UI. Ten pasek zdrowia bossa jest aktualizowany po każdym trafieniu:
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
}Kolor paska również może zależeć od poziomu zdrowia: bossBar.color = Color.Lerp(Color.red, Color.green, bossBar.fillAmount); jest zielony, gdy pasek jest pełny, i staje się czerwony w miarę jego opróżniania.
Wyzwanie
ŁatwyWyświetl tarczę i zdrowie rycerza na dwóch paskach.
- Napisz
ShowBars():shieldBar.fillAmount = (float)shield / maxShield;, a także analogicznie dlahealthBarzhpimaxHp. Wywołaj tę funkcję wStart(). - W
TakeDamagetarcza przyjmuje obrażenia równeMathf.Min(amount, shield), a pozostała część odejmowana jest odhp, które nigdy nie spada poniżej 0. Następnie wywołajShowBars().
Naciśnij „Graj” i wejdź na kolce: pasek tarczy opróżni się jako pierwszy. Następnie naciśnij „Sprawdź”.
Spróbuj swoich sił
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;
// Wypełnij oba paski
}
public void TakeDamage(int amount)
{
// Tarcza pochłania tyle obrażeń, ile może; reszta zmniejsza hp, ale nie poniżej 0. Następnie zaktualizuj oba paski.
}
}
Wszystkie lekcje w sekcji Tworzenie prawdziwych gier
1Tekst na ekranie
Canvas i tekstWyświetlanie wynikuFormatowanie liczbOdliczanie czasuPowtórka: prędkościomierz2Przyciski i ekrany
Przyciski i onClickLambdyPodłączanie w InspectorzeWłączanie i wyłączanie paneliPaski zdrowiaPodsumowanie: sklep z ulepszeniami5Zapisywanie za pomocą PlayerPrefs
Zapisz liczbęWczytywanie z wartością domyślnąNajlepszy wynikZapisz ustawieniaPodsumowanie: monety w bankuPoćwicz samodzielnie: Edytor online Unity