Menu
CoddyTech

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.

challenge icon

Wyzwanie

Łatwy

Wyświetl tarczę i zdrowie rycerza na dwóch paskach.

  1. Napisz ShowBars(): shieldBar.fillAmount = (float)shield / maxShield;, a także analogicznie dla healthBar z hp i maxHp. Wywołaj tę funkcję w Start().
  2. W TakeDamage tarcza przyjmuje obrażenia równe Mathf.Min(amount, shield), a pozostała część odejmowana jest od hp, które nigdy nie spada poniżej 0. Następnie wywołaj ShowBars().

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

Poćwicz samodzielnie: Edytor online Unity