Разработка Tower Defense на Unity — часть 2, проектирование

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Что нам нужно?

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

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

  • Бесконечный режим - режим, в котором волны врагов являются бесконечными, постоянно усложняющимися посредством усиления противников или увеличения их числа.

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

  • Общие технологии - предыдущие два пункта требуют создание дополнительного меню технологий. Так как состояние дерева технологий является локальным для каждого прохождения сюжетного режима и привязано к нему, появляется неоднозначность в вопросе того, откуда брать технологии Бесконечному режиму и Онлайн режиму. Для решения данной проблемы мы создадим раздел общих технологий, где изученными будут все когда либо открытые технологии, в любом прохождении.

Это что касается не очевидного. Меню, настройки и т.д. - само собой разумеющееся.

Сцены и разделы

Теперь, после прояснения абстрактных разделов игры перейдём к чему то более конкретному - к сценам. Руководство Unity говорит о сценах следующее - "Сцены содержат объекты вашей игры. Они могут использоваться для создания главного меню, отдельных уровней и для других целей. Можно считать каждый файл сцены отдельным игровым уровнем. В каждой сцене можно разместить объекты окружения, заграждения, декорации, по кусочкам создавая дизайн и саму игру.". Абстрактные разделы игры могут не совпадать с набором сцен в игре. Например, настройки игры можно разместить в той же сцене, в которой расположено меню и просто раскрывать по нажатию соответствующей кнопки. Так не придётся создавать отдельную сцену под настройки. Бывает и наоборот, когда один абстрактный раздел игры занимает несколько сцен. Давайте я изображу свою идею схематично, а затем всё объясню

Схема разделов(логических сущностей) и сцен
Схема разделов(логических сущностей) и сцен

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

  • Бесконечная игра - данный раздел предполагает игру на уровне, где враги никогда не заканчиваются, но что насчёт выбора самого уровня? Мы ведь не можем просто нажать "Бесконечная игра", ожидая, что программа сама определить, где мы хотим играть. Как минимум нужно выбрать карту. Для задачи предварительной настройки игры необходима сцена, посвящённая данному процессу - Меню создания уровня. Только после предварительной настройки игрок может попасть на Уровень и приступить к игре. Сцену, на которой происходит непосредственный геймплей будем называть Уровнем. Стоит понимать, во-первых, что уровней будет больше одного, но структура у всех +- будет одинаковой, поэтому обозначаем их как одну сцену. Во-вторых, уровни для Сюжетной игры, Бесконечной игры и Онлайн игры будут отличаться, поэтому их мы разделяем. Очевидно, что игра в Онлайн режиме потребует иной архитектуры уровня для обеспечения взаимодействия двух игроков по сети, так же как и уровень в Бесконечной игре будет отличаться от уровня в Сюжетной игре. Итого имеем две сцены для одной логической сущности.

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

  • Сюжетная игра - для данного раздела понадобится меню, в котором мы сможем выбрать уровень для игры и произвести необходимые исследования, открыть новые технологии. Весь этот функционал можно заключить в одной сцене - Меню прохождения, сделав карту и дерево технологий просто разными вкладками на сцене. Так же понадобится сцена для уровня.

Так же одна сцена содержит в себе несколько логических сущностей:

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

И так же остаётся логическая сущность, требующая одну сцену:

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

Логическая схема
Логическая схема
Схема сцен
Схема сцен

Связи и логика переходов

После того, как мы определились с набором сцен, давайте определим их отношения. По обыкновению - сначала схема, а потом объяснения:

Схема связей между логическими сущностями
Схема связей между логическими сущностями
Схема связей между уровнями
Схема связей между уровнями

В целом схемы предельно понятные, но давайте опишу их в двух словах:

Меню, как логическая сущность, естественно, является отправной точкой во всей игре - в нём есть переходы ко всем остальным разделам игры. В каждом разделе есть центральная или входная сцена. Для Онлайн игры это, например, Лобби выбора игры. Для Сюжетной игры - это меню прохождения, а для Бесконечной игры - это меню создания уровня.

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

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

  • Главное меню - тут нам понадобится обеспечить кнопки для следующих переходов:

    • Сюжетная игра

    • Бесконечная игра

    • Онлайн игра

    • Общие технологии

  • Сюжетная игра(Меню прохождения)

    • Главное меню

    • Уровень Сюжетной игры

  • Бесконечная игра(Меню создания уровня)

    • Главное меню

    • Уровень Бесконечной игры

  • Онлайн игра(Лобби поиска игры)

    • Главное меню

    • Создание своего уровня Онлайн игры

    • Уровень Онлайн игры

  • Общие технологии

    • Главное меню

Реализуем структуру в Unity

Безусловно, это далеко не всё, что должно быть предусмотрено. Также в Главном меню необходимо обеспечить возможность открытие настроек, например. Ещё мы ничего не сказали о переходах на других сценах и о куче других мелочей. Однако, у нас уже есть общая схема сцен и логических разделов игры, что даёт нам возможность прямо сейчас реализовать эту схему в Unity, зайдя в свой проект, создав нужные папки(логические разделы) и сцены.

Папка со сценами
Папка со сценами
Папка раздела Бесконечной игры
Папка раздела Бесконечной игры
Папка раздела Общих технологий
Папка раздела Общих технологий
Папка раздела Онлайн игры
Папка раздела Онлайн игры
Папка раздела Сюжетной игры
Папка раздела Сюжетной игры

Итог

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

P.S.

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

Источник: https://habr.com/ru/articles/794416/


Интересные статьи

Интересные статьи

Это вторая часть нашей серии о реверс-инжиниринге двоичных файлов Go с помощью Ghidra. В предыдущей статье мы обсуждали, как восстановить имена функций в удаленных файлах Go и как помочь Ghidra распоз...
Введение Данный цикл статей сформировался по итогам нашего выступления на Offzone-2022 в конце августа. Ввиду ограниченности времени презентации, нам не удалось в полной мере рассказать о данном иссле...
Всем привет. Как и обещал, публикую вторую часть статьи на тему того, кто приносит больше пользы, Business Product Manager или Technical Product Manager. Напомню, что первую часть статьи, где я р...
Сервис Sentry позволяет удаленно мониторить баги в фронтенд-приложениях, написанных на JavaScript. Попытка устранить проблемы в фронтенд-приложениях на JavaScript может оказаться н...
Дамы, господа, сегодня отличный день! Скорее всего вы помните, что существует такая форма компьютерного искусства как «демосцена», но если слышите это слово впервые — просто прочитайте тематич...