Разработка игры на UE5 — часть 1

Несколько лет назад я рискнул попробовать создать свою собственную небольшую игру на игровом движке Unreal Engine 4 (UE4). На тот момент нынешняя 5-я версия движка, UE5, ещё даже не вышла. Основной идеей было создание чего-то в стиле Royal Battle с упором на локальный мультиплеер: это когда с помощью геймпадов можно играть на одном компьютере, а цель игры — остаться последним выжившим в схватке «каждый сам за себя».

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

Со временем пришло понимание, что от игры хочется большего — дополнительных механик, возможности играть против ботов, полноценного глобального мультиплеера и многих других «фишек». При этом большое количество «фундаментального» кода уже было написано.

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

Шло время, и я стал всё меньше заниматься разработкой игры и впоследствии совсем её забросил. Однако ностальгия по процессу работы над ней до сих пор не даёт покоя 🙂

И вот начало 2025 года — в голове жгучее желание начать с нуля, что я и решил сделать! План такой: до конца года создать «играбельный» прототип, максимально приближенный к реальной игре. Пусть даже это будет инди-проект, но обязательно такой, в который будет интересно поиграть. При этом я постараюсь избежать ошибок и недоработок в коде, которые были сделаны в «первой попытке».

Разработку игры планирую разбить на 12 этапов — по одному на каждый месяц. Таким образом конечная цель — готовая игра-прототип в декабре 2025 года. По каждому этапу разработки планирую писать статьи, в которых буду делиться успехами и болями, рассказывать о решении различных проблем. Получится, своего рода, «дневник разработчика». Повествование постараюсь вести таким образом, чтобы было интересно даже человеку, который совсем не разбирается в коде.

Немного об игровых движках

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

Игровые движки существенно упрощают разработку игр и экономят годы жизни современному разработчику 😁

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

Как итог: сейчас практически не возникает вопросов о том, делать ли игру с нуля или на игровом движке — выбор очевиден.

Приступаем к разработке

Итак, за окном январь и у нас первая часть разработки игры. С чего же начать? Что будет фундаментом? Ответ прост — ТЗ! Пусть я и разрабатываю игру сам, по своим собственным идеям, но без технического задания, даже поставленного самому себе, делать игру будет в разы сложнее.

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

Игровой процесс:

1. Вид от третьего лица.
2. Сражение с оружием ближнего боя (мечи, булавы, топоры).
3. Передвижение персонажей: бег, ходьба, прыжки, приседание (возможно).
4. Боевое взаимодействие: атака и возможность заблокировать атаку.
5. Разные персонажи с разными характеристиками: сила, скорость, ловкость, и т.д.
6. Боты с агрессивными AI.
7. Локальный мультиплеер (обязательно) и глобальный мультиплеер (возможно).
8. Основные общие характеристики всех персонажей: здоровье (Health) и выносливость (Stamina).
9. Подсчёт статистики по окончанию боя (у кого из игроков больше фрагов, кто получил больше всего урона и т.д.), игра до определённого количества побед у одного из игроков.

Игровой мир:

1. Несколько игровых карт (минимум: 3). Возможность выбора карт на старте игры.
2. Разная погода на разных картах — солнце, дождь, снег (опционально).
3. Анимированные объекты на картах — движущиеся декорации для более живой атмосферы (опционально).
4. Реалистичная, но не сложная 3D-графика.

Меню и настройки игры:

1. Главное меню, меню паузы.
2. Возможность настройки различных параметров графики.
3. Локализация, возможность выбора языка (русский, английский, опционально — испанский).

Другие пожелания:

1. Черновое название игры: «Последний самурай».
2. Программирование преимущественно с использованием Blueprint с минимальным добавлением С++ (или вообще без него).
3. Промежуточные билды игры для возможности тестирования.

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

Что уже сделано на данном этапе

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

Также хотелось бы протестировать, как работает создание игрока в режиме локального мультиплеера в новой версии движка. Помнится, что в Unreal Engine 4 всё было просто — достаточно вызвать одну единственную функцию Create Local Player нужное количество раз, и у вас будет нужное количество дополнительных игроков (кроме основного, первого игрока — он создаётся автоматически).

А вот в ранних выпусках движка Unreal Engine 5 функцию Create Local Player разработчики сломали, и необходимо было программировать дополнительные «костыли», потому что новые игроки создавались, но в них не «вселялся» контроллер — они не двигались, ими невозможно было управлять.

Что ж, запустим наш движок Unreal Engine 5. Заходим в класс игрового уровня и вызываем нужную функцию на Begin Play (событие начала игры). Подключаем два геймпада и… О, чудо! Всё работает! Создаются игроки, появляется раздельный экран, контроллеры вселяются в игроков! Ура, это сильно облегчает дальнейшую разработку!

Значит, для локального мультиплеера будем использовать функцию Create Local Player на Begin Play, а нужное количество игроков будем создавать через цикл (на примере — код для четырёх игроков):

На этой радостной ноте закончим первую, подготовительную часть разработки нашей игры. Впереди ещё много интересного: создание игровых уровней, анимированных персонажей, разработка игровой логики и многое другое. В общем, до встречи в следующей части! 🙂


Оставить комментарий к этой статье можно в нашем Telegram-канале:

Присоединяйтесь! 😉