Игра, которая заставила меня попотеть. The Last World

Всем привет! Это девлог игры The Last World. Игра разрабатывается одним человеком. Во второй части рассказываю про технические моменты и немного механики. Критика, предложения, советы и вопросы по теме приветствуются.

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

Картинку выше в разрешении 4К можно найти в VK или Discord.
Заранее прошу прощения за длинный пост, я старался максимально минимизировать его, давая больше визуального сопровождения.

ССЫЛКИ

Прежде чем продолжить читать длиннопост, подпишись в сообщество, плиииииз. А также не забудь добавить игру в Желаемое!

Discord || VK || Ссылка на Steam страничку

О ЧЁМ СТАТЬЯ

В прошлой статье я рассказал немного про игру The Last World и вскользь затронул её механики. Кто не знаком с ней, прошу ознакомиться, это займет 5 минут. В этой статье пойдет речь о механиках и некоторых других аспектах игры.


Статью разделил на несколько разделов:

* визуальная составляющая – цвет, стилистика, UI;

* конструкторы – моддинг юнитов и инструментов, модули;

* генераторы – world, terrain, props, resources, grass;

* торговая площадка;

* игровые инструменты;

* древо технологий;

* строительство;

* инвентарь – юнит, постройка.

* немного от себя

ВИЗУАЛЬНАЯ СОСТАВЛЯЮЩАЯ

Стилистика игры The Last World – это грань между реализмом и научной фантастикой. На реалистичность не хватит сил и времени, а делать лоупольный мультик нет желания, поэтому взор пал на что-то среднее.

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

С цветами всё намного сложней, первые года 3 проект был покрыт дымовой завесой. Серые тона были во всем от UI до 3D моделей. В то время я ещё не знал, как правильно работать с цветами, как их подбирать и как они сочетаются между собой. После прочтения книги (Иоханнес Иттен: "Искусство цвета"), которую мне посоветовал друг, я начал смотреть на свой проект иначе. В итоге определил 3 основных цвета и 2 вспомогательных. К примеру, для UI я выбирал из холодных оттенков. В целом результатом доволен, внешне стало намного приятней.

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

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

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео
Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

Касательно построек – каждая из них имеет с десяток параметров и выводить их всех нет смысла, в итоге, вывел на панельку общие параметры и немного уникальных для каждой из построек. Лучше всего читается картинка + текст, нежели текст + текст, а еще будет лучше, если добавить поверх этого всего функцию "tooltip - подсказка”.

Главное меню также выполнено в скромном стиле – есть кнопки, юзабельный задний фон и много свободного пространства, на котором можно разместить разного характера информацию, например – новости или ближайшие анонсы.

Большинство игровых панелей и окон можно перемещать по экранному пространству (если присутствует красная полоска в самом верху панели\окна).

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

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

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

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

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

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

КОНСТРУКТОРЫ

Как писал в первой статье – все уникальные юниты являются модульными, поэтому нужен инструмент, чтобы можно было их редактировать. Система моддинга персонажей (или Конструктор) является одной из основных механик The Last World. Конструктор позволяет собрать персонажа из десятков (а может и больше) механических частей. Полноценный (далее основной) конструктор доступен из главного меню игры. В нём можно создать новый пресет по заготовленному бланку, загрузить сохраненный или дефолтный пресет, а также сгенерировать рандомный, чтобы позже можно было его выбрать при старте новой игры.

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

Работа с конструктором проста – есть модель и есть иконки (слоты), которые прикреплены к модели. Нажав на иконку появляется список со всеми доступными модулями для него. Игроку нужно лишь выбрать его, кликнув на иконку, и после модуль прикрепится на основную модель.

Я планирую сделать, чтобы все модули имели параметр доступности – если игрок исследует модуль в игровой сессии, то этот модуль будет считаться открытым и доступным в основном конструкторе, пока игрок не обнулит свою статистику.

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

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

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

Что касается инструментов юнита то тут примерно всё то же самое, за исключением того, что редактировать их можно только в игре и для доступа к конструктору не нужна будет Мастерская.

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

Есть несколько способов редактирования инструмента – первое это окно моддинга, второе перетащить и прикрепить, и третье - открыть окно обзора предмета и удалить интересующий вас модуль, который был установлен на него. После того как модуль будет прикреплен или удалён иконка инструмента обновится – сделает рендер картинки иконки предмета, внутри проекта это называется "динамическая иконка".

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео
Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

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

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

При перетаскивании модуля инструмента, иконки инструментов в инвентаре персонажа будут подсвечиваться, указывая на то, что они совместимы. Для модулей персонажа доступна схожая функция, но на этот раз будут подсвечиваться совместимые слоты. Помимо этих индикаторов есть и другие, к примеру, если на инструменте нет критических модулей (без которых он не может работать) то иконка будет подсвечена красным цветом. Такой инструмент будет невозможно взять в "руки" персонажа.

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

ГЕНЕРАТОРЫ

Кропотливо расставлять деревья по локации или набивать сундуками какие-нибудь катакомбы это не про The Last World. Я старался всё перевести в машинный код, тем самым облегчив себе работу на будущее. И уменьшить размер сборки на выходе (сейчас вся сборка весит примерно 7Гб, чем дальше - тем больше).

Уникальность всего этого замысла в том, что при одном и том же seed, на любом компьютере, должна генерироваться точно такая же планета и, если игрок выберет одну и ту же локацию, то дерево будет стоять на том же месте.

Итак, первая генерация, с которой сталкивается игрок - это планета. Планета представляет собой гексагональную тайловую сферу. Выбрал именно такую реализацию исполнения планеты, мне нужны были тайлы без лишних деталей (аналогом является игра RimWorld). Количество тайлов на самой большой планете может достигать 1млн.

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

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

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

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

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео
Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

Поверхность делится на чанки, в зависимости от размера локации, варьируется и размер чанка. Чем больше локация, тем меньше чанк (это связано с оптимизацией. На больших чанках размещается огромное количество пропов и компьютеру сложно их постоянно скрывать и показывать, когда камера удаляется на расстояние). Для пропов я использую LODs, а также использую автоматическое скрытие вместе с чанком, когда камера удаляется на расстояние.

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео
Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

На каждый чанк прикреплены пропы сцены, которые тоже генерируются рандомно. К слову о генерации пропов, есть много методов генерации – это и Perlin Noise и Simple Noise и тд и тп, по мне, лучшим вариантом стал Poisone Disk, т.к. он может заполнить область действительно рандомно и без видимых повторяющихся паттернов, главное не ставить слишком маленький шаг итерации, иначе будет бесконечность. Пропы привязаны к высоте слоя локации, чем выше слой, тем плотней генерация пропов.

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео
Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

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

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

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

После генерируется плоскость для воды, ничего особенного, однако тоже генерация сетки.

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

Самым последним генерируется трава, занимает больше всего времени. Трава генерируется на каждом чанке отдельно для оптимизации, хотя я подумываю объединить их и отправить на параллельный поток, пока идет загрузка и игрок не видит локации. Для генерации травы использовал два сгенерированных массива шума – один для высоты травинки, другой для паттерна. Трава генерируется с использованием Perlin Noise, а затем применяется шум для небольшого разброса по поверхности.

Игра, которая заставила меня попотеть. The Last World Gamedev, Разработка, Видеоигра, Инди, Инди игра, Steam, Стратегия, Игры, Unity, YouTube, Гифка, Длиннопост, Indiedev, Генерация, Цвет, Madewithunity, Желаемое, Видео

ЕЩЁ НЕ КОНЕЦ!

Т.к. сайт не позволяет загружать больше графического материала, то вынужден разделить статью на 2 части. Продолжение второй части опубликую чуть позже, чтобы не засорять эфир.

Осталось осветить:
* Торговая площадка;
* Игровые сетевые инструменты;
* Технологическое древо;
* Строительство;
* Свет;

* Инвентарь;
* Немного дополнительного материала.


Критика, предложения, советы и вопросы по теме приветствуются.


Спасибо за инвестированное время! Присоединяйтесь в сообщество и следите за ходом разработки, буду вам рад!

ССЫЛКИ

Не забывайте подписываться в сообщество и следить за новостями. А также не забудь добавить игру в Желаемое!

Discord || VK || Ссылка на Steam страничку

Лига Разработчиков Видеоигр

6.7K постов22.1K подписчика

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

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


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

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

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"