Шкалы здоровья
Часть раздела Создание настоящих игр путешествия по Unity на Coddy. Урок 10 из 60.
Опустошающаяся полоска — это изображение UI с параметром Тип изображения, установленным в значение Заполненное. Этот параметр появляется, когда у изображения задано Исходное изображение; если выбрано «Нет», инспектор его скрывает. При горизонтальном Способе заполнения и начале заполнения Слева полоска уменьшается к левому краю, а fillAmount — от 0 до 1 — показывает, какая её часть отображается. Тёмное изображение позади показывает пустую часть. Unity ограничивает значение fillAmount: при 1.4 отображается полная полоска, а при -0.2 — пустая.
fillAmount — это доля оставшегося здоровья: здоровье, делённое на его максимум. Для полей типа int это целочисленное деление, и 350 / 500 равно 0, поэтому сначала преобразуй одну из частей в float. Image находится в UnityEngine.UI. Эта полоска здоровья босса обновляется после каждого удара:
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
}Цвет полоски тоже может меняться в зависимости от здоровья: bossBar.color = Color.Lerp(Color.red, Color.green, bossBar.fillAmount); — когда полоска полная, она зелёная, а по мере опустошения становится красной.
Задание
ЛегкоПокажи щит и здоровье рыцаря на двух полосках.
- Напиши
ShowBars():shieldBar.fillAmount = (float)shield / maxShield;, а также то же самое дляhealthBarсhpиmaxHp. Вызови этот метод вStart(). - В
TakeDamageщит принимает на себяMathf.Min(amount, shield), а оставшийся урон вычитается изhp, но значение не может быть меньше 0. Затем вызовиShowBars().
Нажми «Играть» и наступи на шипы: полоска щита опустеет первой. Затем нажми «Проверить».
Попробуйте сами
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;
// Заполнить обе шкалы
}
public void TakeDamage(int amount)
{
// Щит поглощает столько урона, сколько может; оставшийся урон уменьшает hp, но не ниже 0. Затем отобразить обе шкалы.
}
}
Все уроки раздела Создание настоящих игр
1Текст на экране
Холст и текстПокажем счётФорматирование чиселТаймер обратного отсчётаПовторение: спидометр4Сцены и уровни
Загрузить сценуПерезапустить уровеньСледующий уровеньСохранить между сценамиПовторение: выбор уровня2Кнопки и экраны
Кнопки и onClickЛямбдыСвязи в InspectorВключение и выключение панелейШкалы здоровьяПовторение: магазин улучшений5Сохранение с помощью PlayerPrefs
Сохранение числаЗагрузка со значением по умолчаниюРекордСохранение настроекПовторение: монеты в банкеПотренируйтесь самостоятельно: Песочница Unity