Menu
CoddyTech

Огонь

Урок 9 из 18 курса Игра в Unity: защита башен на Coddy.

Башня стреляет по своей цели fireRate раз в секунду. Вместо таймера обратного отсчёта башня хранит время следующего выстрела: когда оно достигает Time.time, башня стреляет и сдвигает время следующего выстрела на 1f / fireRate секунд. Разбрызгиватель, который распыляет воду дважды в секунду:

if (Time.time >= nextSpray)
{
    Spray();
    nextSpray = Time.time + 1f / spraysPerSecond;
}

Каждый выстрел — это Projectile, который летит к своей цели с помощью MoveTowards, следуя за ней, пока она идёт, и наносит ей урон по прибытии. Ему не нужно знать, что он попал во врага Enemy: он запрашивает у цели IDamageable — интерфейс для всего, что может получать урон, как в главе об интерфейсах. Поэтому выстрелить можно во всё, что реализует этот интерфейс.

Цель может погибнуть, пока снаряд находится в полёте, — её может уничтожить выстрел другой башни. Тогда target снаряда будет равен null, как и у любого уничтоженного объекта Unity, и снаряду больше некуда лететь, поэтому он уничтожает себя.

challenge icon

Задание

Средне
  1. IDamageable объявляет void TakeDamage(int amount). Реализуй этот интерфейс в Enemy: величина урона вычитается из здоровья, а при значении 0 или меньше враг уничтожается.
  2. В Projectile добавь сериализованный speed типа float (в префабе задано значение 12) и метод public void Launch(Transform target, int damage), который сохраняет оба значения. В Update перемещайся к цели со скоростью speed; по прибытии вызови TakeDamage(damage) у его IDamageable и уничтожь снаряд. Если цель исчезла, уничтожь снаряд.
  3. В Tower добавь публичный int damage, публичный float fireRate (выстрелов в секунду) и сериализованный projectilePrefab (объект Projectile). Пока у башни есть цель, стреляй не чаще, чем fireRate раз в секунду: создай снаряд немного впереди головной части, в точке head.position + head.forward * 0.6f, и запусти его в цель, нанеся урон, заданный для башни.

В префабе ArrowTower задан урон 2 и fireRate 1.5, а его снаряд — ArrowShot. Нажми Play, построй башни и останови первую волну, затем нажми Check.

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

using UnityEngine;

// Будет добавлено позже: снаряд, летящий от башни к своей цели.
public class Projectile : MonoBehaviour
{
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Игра в Unity: защита башен