Приветствую!
Хотел бы познакомить вас с относительно небольшим проектом, который я сделал c нуля примерно за 150 часов (50 заходов ~3 часа каждый) на Unreal Engine 4. Проект я делал в прямом эфире только на стримах раз в неделю (в общей сложности ушел год), попутно отвечая на вопросы пользователей.
Сам проект не предназначался как коммерческий. Целью я ставил на практике показать всю сложность разработки игр, а именно такие проблемы, как:
- Планирование и прототипирование проекта
- Продумывание и реализация архитектуры проекта и отдельных его компонентов
- Реализация интерфейса пользователя
- Отладка и исправление ошибок
- Работа с ассетами и графикой
В конце всей серии стримов у нас получился играбельный прототип “Сурвайвл” шутера. Те, у кого стакан наполовину полон, смогут даже назвать это пре-альфой без сюжета.
Если вам интересны подробности проекта, записи стримов, исходники и прочее, читайте далее.
Весь проект был реализован на визуальной системе программирования, под названием “Блупринты”. И конечно многие спецы могут назвать её ребяческой, разработать на ней можно спокойно даже относительно крупный проект. Более того, это можно сделать относительно быстро, как мы уже смогли доказать.
Сразу хочу ответить на вопрос: "Почему Блупринты, а не С++?". Ну во первых, когда я начинал серию, плюсы я почти не знал. Хотя я и сейчас подобный сингл делал бы на БП. Во вторых, БП почти не уступают плюсам в нашем случае, но при этом дают ряд возможностей: Не позволяют наделать множество ошибок, возможных с плюсами, не приходится отвлекаться между БП и С++, понятнее новичкам. Да и они в нашем случае не намного медленнее, учитывая тот факт, что почти вся логика построена на событиях.
Мы так же успели немного поработать над графикой. К сожалению, ассеты делать времени у нас не было, поэтому мы часть оставили пустышками, часть сделали прямо в редакторе из примитивов, а некоторый контент позаимствовали из бесплатных демок Epic Games. Тем не менее, что-то успели сделать и сами, например систему дня и ночи, постобработку для воды и некоторые материалы объектов сцены.
В планы моих стримов так же стояли и проблемы, которые могут возникнуть при разработке. Их я специально решал в прямом эфире, дабы не только показать, с чем могут столкнуться юные разработчики, но и как отлаживать свой код, искать баги и писать свой код так, что бы все это дело можно было делать в два раза быстрее. Конечно опыта в программировании у меня не десятки лет, и это сказывалось на том, какие порой глупые ошибки я делал. Да и уверен, что многие разработчики могут оспорить множество моментов в процессе написания игры.
Естественно, полноценной игрой это вряд ли можно назвать, так как нету ни сюжета, ни цели в игре — только чистая механика. Тем не менее, я считаю, что результатом можно гордится и он вполне отражает то, для чего задумывался весь проект.
- Управление персонажем
- Система жизненных показателей (Жизни, броня, стамина, голод, жажда)
- Переключение вида (от первого лица и от третьего)
- Моделька (сделали во Fuse, анимации взяли с Mixamo)
- Настроенные анимации передвижения и использования оружия
- Универсальное взаимодействие с предметами
Объектная система инвентаря
- Компонент инвентаря (встраивай в любой объект, куда хочешь)
- Клеточная система с поддержкой различного размера предметов
- Размер инвентаря по клеткам на страницу и по весу.
- Класс предметов, которые можно положить в инвентарь. Предметы хранятся в качестве объектов.
- Вес, размер, информация, состояние предмета
- Функционал для стака (когда в одной ячейке много одного предмета)
- Возможность добавить логику использования предмета
- Выбрасывание из инвентаря
- Интерфейс для взаимодействия с инвентарем
- Интерфейс для обмена между другим компонентом и своим.
- Drag&Drop манипуляция объектами между инвентарями и внутри одного.
- Контекстное менюу предметов
- Подсказки при наведении на предметы в инвентаре и в мире.
- Список генерируемых предметов при создании объекта с компонентом / начале игры.
- Список начальных предметов при создании объекта с компонентом / начале игры.
- Система торговли между другим инвентарем
- Интерфейс торговли
- Компонент менеджмента денег (необходим для работы торговли)
Система экипировки
- Экипировка нескольких типов предметов: Шляпы, Топ, Брюки, Ботинки, Оружие
- Скелетная синхронизация у Топа, брюк и ботинок. (Шляпы и оружие по сокетам)
- Удобное окошко для экипировки с поддержкой Drag&Drop
- Поддержка логики-модификаторов при одевании
Оружие
- Дальнобойное оружие
- Перезарядка
- Использование предметов-патронов из инвентаря
- Поддержка классов снарядов/пуль
- Автоогонь/одиночный огонь
- Отдача с разбросом (свой + от факторов, н.п. бег или приседание)
- Холодное оружие (с несколькими видами проверок на урон на выбор)
- Состояние оружия ухудшается при использовании
Система крафта
- Крафт по рецепту (выбрал рецепт, он скрафтил, аля фоллаут)
- Крафт по предметам (закинул нужные предметы, он скрафтил, аля майнкрафт)
- Интерфейс пользователя только для второго типа крафта.
Агрессивные мобы
- Мобы ближнего боя (если увидят, побегут и начнут бить)
- Мобы смешанного типа (стреляют, но если достаточно близко, побегут что бы ударить)
- Дальники оббегают препятствия, если не могут выстрелить.
- Есть встроенный инвентарь для лута после убийства.
- Зона спауна
- Список классов
- Шанс спауна
NPC
- Городские NPC, патрулирующие свою зону спауна
- Уникальные NPC
- Базовый контроллер расписания для уникальных НПЦ
- Реакция на урон (убегают или используют имеющееся оружие)
- Встроенный инвентарь для лута после убийства.
- Объектная диалоговая система
- Дерево диалогов
- Каждый ответ — объект
- Для каждого ответа можно докинуть любую логику или условие доступности.
- Интерфейс диалога
- Несколько готовых классов ответа (запускает торговлю, забирает ресурсы, если есть, выходит из диалога)
Строительство
- Класс конструкций, которые поддерживают размещение
- Использование предметов-ресурсов из инвентаря при размещении.
- Снаппинг на некоторых типах конструкций (н.п. Стены, фундамент, окна)
- Менюшка с конструкциями
- Подсвечивание конструкций, на которые хватает ресурсов
Дополнительно
- Небольшая карта с городом, лесом, водоемами (можно плавать).
- Система смены дня/ночи
- Автомобили
- Вид от первого или третьего. Общее с персом
- Включение/выключение фар.
- Встроенный компонент инвентаря (нужно взаимодействовать у багажника)
- Кое как работающие лестницы вертикального типа.
- Главное меню
- Меню паузы
- Меню с настройками графики
Впрочем, говорить о проекте можно бесконечно. И чтобы не превращать статью в книгу, предлагаю ознакомиться с игрой и возможностями по видео. А тем, кому стало действительно интересно, чуть ниже сможете найти записи всех стримов, ссылки на исходники и билд игры.
Записи всех 50-ти частей стримов
- Начинаем и планируем проект. Создаем управление и поведение персонажа.
- Начинаем делать систему инвентаря.
- Продолжаем делать базу системы инвентаря.
- Готовим базу для экипировки и вооружения.
- Работа над оружием и использовании патронов.
- Делаем автострельбу и прицеливание.
- Создаем базовую систему крафта.
- Бег, переработка предметов и их износ.
- Реализовываем перезарядку для оружия.
- Делаем оружие ближнего боя.
- Доделываем ближний бой и делаем лестницу по которой можно взбираться.
- Делаем интерактивные предметы: Дерево, камень, кусты.
- Делаем HUD и начинаем делать интерфейс для инвентаря.
- Продолжаем работать над интерфейсом инвентаря. Делаем генерацию ячеек с предметами.
- Продолжаем делать генерацию ячеек и поиск места для предмета. Добавляем страницы инвентаря.
- Делаем небольшое взаимодействие с предметами в инвентаре и окно подробной информации.
- Сделали Drag&Drop перетаскивание предметов по инвентарю и в другой инвентарь.
- В этой части речь идет о визуализации крафта.
- Создаем окно с выбором количества предметов из стака для переброса в другой инвентарь.
- Делаем поддержку разных рецептов крафта, а так же фиксим разные баги у инвентаря.
- Создаем систему смены дня и ночи, а так же делаем новую сцену для нашего проекта.
- Начинаем создавать AI для агрессивных ботов.
- Делаем атаку мобов, а так же реакцию на атаку. Плюс реализуем сбор лута с мертвых мобов.
- Делаем зону спауна для нпц. Так же добавляем генерацию случайных предметов в инвентаре.
- Обновляемся до 4.13, а так же делаем дальних агрессивных нпц.
- Добавляем разные элементы на HUD. Добавляем ручную перезарядку оружия.
- Доделываем поддержку скелетной одежды и шапок. Добавляем анимацию для оружия от первого лица.
- Делаем интерфейс для работы с нашей системой экипировки.
- Начинаем делать торговую систему и компонент менеджмента денег.
- Продолжаем делать торговлю, создавая и настраивая компонент торговли.
- Делаем отмену торговли, а так же настраиваем анимацию перезарядки.
- Создаем транспорт со своим инвентарем, фарами и переключением вида. Создаем фонарик.
- Создаем строительство (а точнее систему размещения объектов перед собой).
- Делаем интерфейс для строительства, делаем привязку для стен.
- Создаем ещё несколько видов конструкций: Палатка, кровать, стул, стол, лампа, дверь. сундук, костер.
- Добавляем крышу, окна. Доделываем выравнивание относительно других конструкций.
- Делаем небольшое поселение, а так же населяем его NPC, которые так же создаем в этом уроке.
- Начинаем делать систему диалогов для наших жителей.
- Настраиваем туман и постобработку. Импортируем модель зомби и настраиваем ему анимации.
- Доделываем систему диалогов.
- Делаем взаимодействие с предметами от третьего лица, а так же модификаторы для брони.
- Создаем главное меню, меню паузы и настройки графики. А так же собираем первую сборку игры.
- Реализуем расписание для уникальных жителей.А так же что бы городские NPC убегали от атаки.
- Добавляем контекстное меню в инвентарь, а так же фиксим некоторые баги нашего инвентаря.
- Добавляем отдачу, разброс, анимацию выстрела и возможность ударить для огнестрельного оружия.
- Доделаем агрессивных и городских NPC, фиксим разные баги, связанные с ними.
- Настраиваем анимации для главного персонажа. Добавляем различную одежду.
- Исправляем различные ошибки в нашей игре.
- Исправляем различные ошибки крафта, NPC и экипировки в нашей игре.
- Немного дорабатываем карту и собираем последний билд.
Исходники на Git (загрузка ZIP архивом не работает, архив почему-то поврежден.)
Исходники на ЯДиск (Лицензия та же, что и в исходниках)
Билд игры
В будущем я и дальше планирую проводить подобные стримы. Например на очереди у нас стрим по мультиплеерному шутеру, а затем стратегия. Следить за стримами можно в нашей ВК группе.
Автор: Александр Блинцов