Menu
CoddyTech

Paski zdrowia

Część sekcji Tworzenie prawdziwych gier ścieżki Unity w Coddy. Lekcja 10 z 56.

Pasek, który się opróżnia, to obraz interfejsu użytkownika z ustawionym typem Image Type na Filled. To ustawienie pojawia się, gdy obraz ma przypisany Source Image; gdy jest ustawione na None, Inspector je ukrywa. Metoda Fill Method ustawiona na Horizontal i Fill Origin ustawione na Left sprawiają, że pasek kurczy się w kierunku lewego końca, a fillAmount, od 0 do 1, określa, jaka jego część jest rysowana. Ciemny obraz pod nim pokazuje pustą część. Unity ogranicza wartość fillAmount, więc 1.4 rysuje pełny pasek, a -0.2 pusty.

fillAmount to pozostała część zdrowia: zdrowie podzielone przez jego maksimum. W przypadku pól int jest to dzielenie całkowite, a 350 / 500 daje 0, więc najpierw rzutuj jedną ze stron na float. Image znajduje się w UnityEngine.UI. Ten pasek 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.

challenge icon

Wyzwanie

Łatwy

Rycerka ma tarczę, która pochłania obrażenia, zanim zaczną ubywać jej punkty zdrowia. Strzałkami porusza nią (Mover.cs), a kolce zadają jej 30 obrażeń, gdy na nie nadepnie (Spikes.cs). Napisz Knight.cs; w scenie są podpięte healthBar i shieldBar, które są w niej puste:

  • hp zaczyna od wartości maxHp (80), a shield od wartości maxShield (40); oba paski zaczynają się jako pełne.
  • TakeDamage(int amount): tarcza pochłania tyle obrażeń, ile może, a pozostała część odejmowana jest od hp, które nigdy nie spada poniżej 0.
  • Po każdym trafieniu oba paski pokazują pozostałą wartość: shieldBar pokazuje tarczę w stosunku do maxShield, a healthBar — hp w stosunku do maxHp.

Naciśnij Play, kilka razy wejdź na kolce, a następnie naciśnij Check.

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 przyjmuje tyle obrażeń, ile może; reszta zmniejsza hp, ale nie poniżej 0. Następnie wyświetl oba paski.
    }
}
quiz iconSprawdź się

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

Wszystkie lekcje w sekcji Tworzenie prawdziwych gier