Всем привет! Хочу рассказать про свой проект и свой путь в его разработке.
И как теперь это выглядит (пикабу совершенно не хочет грузить видео, поэтому предоставляю ссылочку на ютуб):
Называется Astrosembler, построена на движке Unreal Engine 5. Это игра на выживание в жанре sandbox builder, но здесь не тот сурвайвл о котором можно подумать. Нет голода, жажды или необходимости искать еду. Вместо этого выживание здесь заключается в защите собственной базы.
Пришельцы не в восторге от вашего присутствия. Чем больше вы строите, тем больше они будут атаковать, заставляя вас защищаться и адаптироваться.
Игра черпает вдохновение из таких игр, как Factorio и Satisfactory, и поклонники этих игр наверняка заметят некоторые сходства. Однако моя цель — продвинуть этот жанр дальше. Хотя производственные линии и заводы являются неотъемлемой частью игрового процесса, они являются лишь кусочком игры. Основное внимание уделяется слиянию — смешиванию sandbox building с механикой FPS. Вы не просто инженер; вы исследователь, промышленный пионер и закаленный в боях космический десантник в одном лице.
Вы играете за Первопроходца, элитного агента корпорации Adaptex, компании, специализирующейся на исследовании новых миров, создании производственных сетей и добыче ресурсов. Их основная стратегия - это отправлять одного эксперта, такого как вы, вооруженного до зубов технологиями, для создания передовых баз, запуска производства и прокладывания пути к полномасштабным промышленным операциям.
Все производство в игре работает на вас, как на военную машину. Фабрики - лишь способ заполучить новое оружие, новую броню, новые турели и защитные сооружения для ваших фабрик. Ваша задача - исследовать породы, найти то что нужно, установить мощную защиту и ждать подкрепление от корпорации которая уже в клещи захватит всю планету.
Действие игры происходит в системе «Вихрь», а вашей конечной целью является Фортуна II, луна, вращающаяся вокруг газового гиганта Фортуна Прайм.
Что уже готово на данный момент:
Рабочая система производства и строительства
Механика электричества и добычи
Контракты и миссии
ИИ, который активно атакует базу
Вообще проект довольно огромный. Тянуть его практически в одну хлеборезку крайне тяжело, но я двигаюсь. Мне помогают пара человек с 3д моделированием в разработке, но этого не хватает и приходится довольное многое закрывать и своими силами в том числе по 3д. А ведь еще накладывается и код, оптимизация, работа по материалам, VFX, SFX, геймдизайн, нарратив, интерфейсы и еще куча всего. Честно говоря не могу рекомендовать такой подход. Приходится много работать, много заставлять себя даже когда не хочется. И это долгая работа. Если уж такое начинать - постарайтесь хорошо взвесить все за и против. Лично я понимал на что иду, и поэтому и начал этим заниматься.
Главное чтобы это было интересным, и лично для меня это увлекательное приключение, хотя по моим меркам и долгое, а я-то думал в начале что смогу уже выпустить версию для раннего доступа спустя 6-8 месяцев, ха-ха.
Весь код в проекте написан мною с нуля, в основном я использую Blueprints, переходя на С++ только там, где блюпринты начинают проседать в оптимизации (например большие циклы). Дроны которые перевозят ресурсы из одной точки в другую как раз используют формулы для просчета движения на базе C++.
Еще один хорошим методом все оптимизировать является использование Instanced Static Mesh - из-за этого движок рендерит все модели в один draw call, это очень снижает нагрузку. Особенно если у вас фабрика на сотни строений и тысячи дронов которые носятся повсюду. Ну и конечно уход от тика или крайне осторожное его использование.
По итогу это дает возможность использовать очень большое количество объектов на экране, вот пример как это выглядит, более 5000 дронов двигаются без потери кадров (видео местами шакальное, прошу прощения за это):
Оптимизация выносит голову почище всех других вещей, но не хотелось бы чтобы игроки думали что "Unreal Engine 5? Фу, неоптимизированная хрень!". Поэтому стараюсь не упускать из виду.
Самое веселое при разработке таких проектов, это то что крайне тяжело найти хотя бы общий подход к разработке той или иной вещи. Казалось бы, нужна мелочь - система привязки строений друг к другу (snapping). И если вам нужна базовая система - пожалуйста, куча инфы в интернете, можно сделать. Но не дай бог понадобится что-то более сложное, вот тут придется уже танцевать как придумается. Понятия не имею как это реализовано в других играх под капотом. На руках было только понимание с точки геймдизайна, как это должно работать. А вот уже действительно написать эту систему - становилось ночным кошмаром. Почувствовал себя так, будто бы я изобретаю велосипед. Но в конце-концов получилось, привязка работает хорошо и так, как я задумал. Но огрехи еще остались, их нужно будет решить.
Таким вот "кубиком" я решил вопрос снаппинга, на кубе есть точки по которым работают привязки и этот "кубик" обрамляет сам объект. На деле есть не только кубик, потому что бывают и другие формы. Но системы лучше я не придумал.
Безусловно, наступают моменты когда устал, когда выгорел и хочется кинуть все это, сдавшись. Особенно когда делаешь это втихую, и даже не понимаешь, будет ли у такой игры какой-то отклик. Сложность данного проекта еще в том, что мне хотелось избежать сравнения с Satisfactory в стиле "да ты же клон игры делаешь, нафиг она нужна?". А чтобы показать всю идею целиком, нужно было сделать очень много чего. На самом деле даже сейчас, еще не до конца все сделано и не до конца все сформировано. Но я чувствую что пора, пора бы уже начать рассказывать, чтобы послушать что думают люди.
Когда наступает выгорание, я для себя выработал такую тактику - отдохнуть, взять недельку-другую, переключиться вообще на другой тип деятельности (что я и делаю, например с 3д печатью), а после - вновь врываться в бой. Бывали моменты когда приходилось и на месяц оставлять разработку, но после этого с новыми силами вновь фигачил как дурной (по 8-10ч в день). Благо работа позволяет много времени уделять своему проекту.
Гораздо проще когда у вас есть слаженная команда. Куда сложнее - это её собрать. Но если есть возможность, рекомендую всегда собирать людей и работать вместе. Так интереснее, так проще, это больше мотивирует. В одиночку делать очень тяжело.
Карту планирую достаточно большую - 15х15км, ландшафт уже готов, это разные зоны - и пустыня, высокогорье со снегом, вулканическая местность, болота, джунгли. Каждая локация будет обладать своим уникальным воздействием на фабрики и геймплей.
В далеком будущем хочется развить игру в нечто большое. Несколько планет. Межпланетная защита и производство. Но это очень далекие планы. Время покажет, будет ли интересен такой проект, и если да - это будет зеленым сигналом для меня в дальнейшей разработке.
Надеюсь вам было интересно и я готов ответить на любые вопросы! Если вам любопытно следить за разработкой - приглашаю в дискорд сервер, где я рассказываю про прогресс (сервер на английском языке) https://discord.gg/MZeW3YVM
UPD:
Discord был расширен на дополнительные каналы в том числе для обсуждения на русском языке. Спасибо неравнодушному пользователю @oOpsBY, который указал на это.