Разрабатываю свою версию Plants VS Zombie в стиле Post-Apocalyptic на Unity

Скриншот из игры (самая первая собранная версия за 16 часов)
Скриншот из игры (самая первая собранная версия за 16 часов)

Как к этому пришло?

раньше я работал над игрой в жанре tower defense, вдохновлённой Plants VS Zombies, с сеттингом в стиле средневековья. Геймплей сохранял базовые механики PvZ, но действие происходило в мире средневековья, с классическими для эпохи юнитами и оружием.

Разрабатываю свою версию Plants VS Zombie в стиле Post-Apocalyptic на Unity

мне всегда нравилось тестировать разные механики через «песочницу», которую я сам создал, добавлять различные взаимодействия между юнитами и врагами. Среди юнитов были и современные - винтовка, дробовик, газовый баллон, чтобы добавить разнообразия.

стоит отметить, что я никогда не стремился просто клонировать Plants VS Zombies - мне хотелось внести что-то своё, уникальное в геймплей. Например, я хотел, чтобы игрок не мог просто выстраивать идеальные, одинаковые линии защиты, как это было возможно в оригинальной игре. Для этого в старом средневековом проекте я добавил два новых типа объектов, занимающих клетки на поле: камни — основную валюту, на которые можно ставить шахтёров для добычи ресурсов, и клетки леса — которые просто блокировали слот и не давали игроку выстроить идеальную, симметричную оборону. Таким образом, геймплей становился более динамичным и требовал стратегического подхода.

Разрабатываю свою версию Plants VS Zombie в стиле Post-Apocalyptic на Unity

но со временем я немного забил на этот проект, потерял к нему интерес. Недавно, пересмотрев идеи и переосмыслив всё, я понял, что хочу сделать игру с более реалистичными элементами. К тому времени я уже прошёл The Last of Us 2, и это сильно меня вдохновило на создание более мрачного и достоверного мира.

Разрабатываю свою версию Plants VS Zombie в стиле Post-Apocalyptic на Unity

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

Новая система сетки

новая игра создавалась спустя некоторое время, когда у меня уже появились новые навыки и опыт. Одним из ключевых изменений стало переосмысление системы сетки, по которой располагаются враги и юниты.

в первой игре я использовал подход из туториала, который оказался слишком сложным и не совсем подходящим для моей задумки. Там сетка была реализована как 3d-плоский объект, на который из камеры отправлялся луч. Полученные координаты округлялись до целых чисел, что и давало позицию для размещения юнита. Визуально сетка создавалась кастомным шейдером, накладывающим текстуру на поверхность. Такой метод оказался излишне громоздким и плохо масштабируемым для дальнейшей доработки.

в новом проекте я решил уйти от этого и реализовал сетку по-своему. Теперь каждая клетка — отдельный объект со своим скриптом. При наведении на неё клетка выделяется, сигнализируя о возможности поставить на неё юнита. Все клетки — дочерние объекты одного главного объекта Grid, который контролирует расположение всех клеток в ровные ряды с равным расстоянием между ними. Этот подход дал гибкость в управлении каждой отдельной клеткой и значительно упростил логику размещения.

и также, к моменту разработки я познакомился с расширением DoTweenV2 для Unity — плагином, который стал незаменимым во всех моих проектах. Он позволяет создавать анимации в пару строк кода. Теперь каждая клетка не только меняет спрайт при наведении, но и плавно увеличивается, становясь ярче остальных. Это добавляет визуального импакта и делает игровой процесс более приятным и живым.

Новая система полоски здоровья

ещё одним важным нововведением стала полностью переработанная полоска здоровья. В предыдущем проекте реализация ХП-баров была одинаковой, но прописывалась вручную внутри каждого скрипта юнита, что быстро превращалось в рутину и утомляло.

чтобы упростить этот процесс, я создал универсальный скрипт ProgressBar, который можно применять к любому объекту. Теперь, чтобы добавить полоску здоровья, достаточно объявить переменную типа public ProgressBar healthBar и вызвать метод создания:

healthBar.CreateBar(Instantiate(healthBar.barPrefab, transform));

а при получении урона просто обновить интерфейс с помощью:

healthBar.UpdateUI(currentHealth, maxHealth);

вместо тонны повторяющегося кода - всего три строки, что значительно облегчило работу и снизило количество ошибок.

к тому же, новый ХП-бар поддерживает цветовой градиент, который плавно меняется в зависимости от текущего состояния здоровья. градиент удобно настраивается прямо в редакторе Unity.

Разрабатываю свою версию Plants VS Zombie в стиле Post-Apocalyptic на Unity

ещё я добавил анимацию убавления ХП: теперь полоска не просто резко меняет длину, а плавно и быстро уменьшается, создавая более приятный и живой визуальный эффект.

разрабатывать игры - это не просто создавать контент, для меня главное - постоянно встраивать новые механики и переосмысливать старые, перепрограммируя их заново. именно этот процесс - поиск, эксперимент и улучшение - приносит настоящее удовольствие и позволяет делать игру живой и уникальной.

хочешь видеть, как я продолжаю пилить этот проект? заглядывай в телегу — там всё самое свежее и по кайфу.

10
1
3 комментария