Menu
CoddyTech

Наносим урон всему

Часть раздела Архитектура игр в Unity путешествия по Unity на Coddy. Урок 43 из 50.

challenge icon

Задание

Средне

Теперь бой идет в обе стороны. Сохрани всё из предыдущих уроков. Враги больше не помечены тегами: взмах находит то, чему может нанести урон, через интерфейс, а враги наносят урон герою через тот же интерфейс.

  • IDamageable объявляет один метод: void TakeDamage(int amount);.
  • Enemy реализует его. У него есть health, damage и attackEvery, задаваемые в Inspector (у grunt — 2, 1 и 1; у dasher — 1, 2 и 1). TakeDamage вычитает amount из health и уничтожает врага, если здоровье становится равным 0 или меньше. В Start сохрани также ссылку на IDamageable героя. Каждый кадр, когда герой находится на расстоянии не более 1.2 единиц, вызывай его TakeDamage(damage) не чаще одного раза в attackEvery секунд.
  • Hero реализует этот интерфейс. В Inspector задаются swingDamage (1), maxHealth (5) и safeTime (1), а значение health при запуске в Awake устанавливается равным maxHealth. При попадании из health вычитается amount, здоровье выводится в журнал как Hero HP: 4, а герой защищен от последующих попаданий в течение safeTime секунд. При 0 здоровья выведи в журнал The hero falls и выключи скрипт Hero (enabled = false). Упавший герой игнорирует попадания.
  • Взмах больше не проверяет теги и ничего не уничтожает: он вызывает TakeDamage(swingDamage) у всего, что находится в радиусе досягаемости и перед героем и имеет интерфейс IDamageable.

Нажми Play и сразись, затем нажми Check.

Попробуйте сами

// В одном из следующих уроков здесь появится содержимое: всё, что может получить урон.
public interface IDamageable
{
}

Все уроки раздела Архитектура игр в Unity