Menu
CoddyTech

Облегчённая защита башни

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

Крипы движутся по дороге к вашей базе, а её защищает одна башня. Башня стреляет болтами по ближайшему к ней крипу, пока тот находится в радиусе действия, и за каждого поверженного крипа вы получаете золото. Нажмите пробел, чтобы потратить золото на следующий уровень башни: с каждым уровнем она достаёт дальше, стреляет быстрее или наносит больше урона. Если крип доберётся до базы, он прорвётся. Уровни — это игровые данные, которые дизайнер настраивает в ресурсе, не затрагивая код. Башня стреляет множеством болтов, поэтому повторно использует их из пула, а не создаёт и уничтожает по одному для каждого выстрела.

Напишите два скрипта: TowerData — тип ресурса, и Tower. Скрипты Creep, Bolt и CreepSpawner уже готовы.

challenge icon

Задание

Сложно

Inspector задаёт Tower data (ресурс Arrow), boltPrefab и infoText. Считывай нажатие Space через Keyboard.current из Input System.

  • В TowerData.cs: класс TowerLevel, который Inspector может отображать, с полями public float range, public float fireEvery, public int damage и public int cost (стоимость достижения этого уровня), и TowerData — ScriptableObject с пунктом в меню Create и полем public List<TowerLevel> levels. Ресурс Arrow содержит три уровня: дальность 4, интервал 1 с, урон 1, стоимость 0; дальность 5, интервал 0.6 с, урон 1, стоимость 6; дальность 6, интервал 0.4 с, урон 2, стоимость 12.
  • Башня начинает с первого уровня и 0 золота, а infoText показывает оба значения в виде Level 1, 0 gold при каждом их изменении.
  • Когда с последнего выстрела проходит указанное в fireEvery количество секунд и в радиусе действия есть крип (коллайдер крипа находится в пределах range от башни, как обнаруживает Physics.OverlapSphere), башня стреляет в ближайшего к ней крипа. Она берёт болт из ObjectPool<Bolt>, помещает его у башни и вызывает bolt.Launch(creep, damage, pool.Release): когда болт заканчивает работу, он вызывает последний аргумент, который возвращает болт в пул. Пока болт ждёт в пуле, он деактивирован и активируется, когда его забирают.
  • За каждого погибшего крипа начисляется его bounty в золоте: подпишись на статическое событие Creep.Killed.
  • Нажатие Space покупает следующий уровень, если он есть и золота хватает на его cost: стоимость вычитается из золота, а башня переходит на следующий уровень и выводит сообщение Tower level 2. В противном случае нажатие Space ничего не делает.

Нажми Play, удерживай дорогу и улучшай башню, затем нажми Check.

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

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Pool;
using TMPro;

public class Tower : MonoBehaviour
{
    [SerializeField] private TowerData data;
    [SerializeField] private Bolt boltPrefab;
    [SerializeField] private TMP_Text infoText;

    private int level;
    private int gold;
}
quiz iconПроверьте себя

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

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