Краткое содержание:

  • Вступление

  • C++

  • UI

  • Анимации

  • Механизмы

  • В следующем выпуске

Вступление

Привет, друзья! В этом цикле статей я максимально подробно буду рассказывать о процессе разработки игры на UE – SuperIndustry. Вы сможете на моем примере познать процесс разработки 3D игры на UE. Вкратце про игру: Представьте гибрид Oxygen not included и Satisfactory, в далеком будущем и на специфичной экзо планете. В игре будет глубокий сюжет, который будет повествоваться через своеобразный дневник. Главная цель – улететь с планеты (остановиться на достигнутом) или же продолжить общение с высшим Существом и узнать, что будет дальше.

Предыдущая часть.

C++

Создавать игры на UE можно 3 способами: только BP (блюпринты) – перетаскивать “квадратики”, только С++ - писать все кодом, BP&C++ - часть логики реализовывать на блюпринтах и часть на С++. Я выбрал 3 вариант, т. к. полностью на BP проект уже выпущен, писать всю логику на С++ слишком долго и очень сложно. Для меня BP&C++ - идеальный вариант.

Прошел месяц со старта обучения. Основы чистого С++ дались мне не очень трудно (Знание Python многократно облегчило изучение нового языка), настало время изучения плюсов в рамках анрила. И началось…

UI

Между началом изучения анриловских плюсов и первой написанной строчкой кода прошла ~неделя. Я банально не понимал, куда писать код! Изначально мне казалось, что анриловский C++ - отдельный язык с синтаксисом С++, но очень скоро я понял, что все не так уж и страшно.

Первым делом я решил реализовать вывод информации о механизме при наведении на него, а именно его название и текущий запас энергии. Это заняло достаточно много времени, т. к. я еще не понимал, как и куда писать код. Работает это так: n раз в секунду из камеры игрока вылетает луч, если он врезается в механизм (наследник C++ класса “mechanism”), то запрашивается информация о механизме и появляется вот такое окошко.

Недолго думая, я решил, что название механизма будет показываться на русском языке, вот что из этого вышло

Помучавшись пару вечеров, я понял, что название на английском тоже смотрится неплохо =D

P.S. Про полосы в левой нижней части гифки в следующем выпуске.

Вслед за сообщением с информацией механизма я решил сделать UI самого механизма.

За 1 вечер я набросал вот такой интерфейс для кислородного наполнителя:

Набросок UI
Набросок UI

Настало время переводить это в анрил =D

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

Спустя несколько вечеров… У меня получилось вывести UI созданный не через C++. (P.S. Если прописывать интерфейс кодом, что крайне непросто, то его гораздо легче выводить на экран. Из за простоты я создавал UI через редактор интерфейсов - UMG)

Это был непростой вызов =D
Это был непростой вызов =D

Еще, при открытии UI механизма было бы неплохо ограничивать игрока в передвижении и осмотре. *Спустя несколько вечеров*. Наконец, мне удалось реализовать эту «простую» фичу. Чего я только не пробовал: удалять компонент движения, расширять логику движений, изменять текущее состояние (падение, плавание, ходьба). Решением стало изменения способа ввода (игра/UI), но на этом проблемы не закончились… Если войти в UI механизма с зажатой кнопкой передвижения, то при выходе персонаж продолжал двигаться, даже когда кнопка не нажата. На форуме я нашел решение.

Только после этого, все стало работать как надо. Или не совсем...

Через случайный промежуток времени после запуска, UI переставал открываться. Сопровождалось это все вылетом с ошибкой «EXCEPTION_ACCESS_VIOLATION reading address 0x0000000000000000». Такого рода ошибки вылезают из за обращения к нулевому указателю. В моем случае проблема была в том, что сборщик мусора удалял переменные с UI. Решилось это тем, что я обернул все переменные, которые хоть как то относятся к UI в UPROPERTY().

Наконец, UI готов. Итоговая версия слегка отличается от прототипа.

В правой части скорее всего будут настройки для автоматизации, но об этом пока говорить еще слишком рано. Все механизмы в качестве энергии будут использовать SEP (Superindustry Energy Points).

UI солнечной панели
UI солнечной панели

Остался UI для карьера. Здесь все немного сложнее. В UI карьера присутствует инвентарь. Для его реализации нужно довольно много времени. По этому UI карьера будет реализован в следующем выпуске.

Набросок из Photoshop
Набросок из Photoshop

Анимации

Настало время “оживить” нашего астронавта. Для этого мы еще в предыдущем выпуске нашли необходимые анимации. Начнем с бега. Для того, чтобы проигрывать анимацию бега, нужно сначала прописать логику бега.

В этом отрывке кода выполняется привязка функций к событиям. Например: при активации события "Turn Right / Left Mouse" (а это событие активируется, когда игрок шевелит мышкой) вызывается функция движения камерой. По этому принципу я привязал функцию бега к новому событию.

Шаг
Шаг
Бег
Бег
Ёж Соник
Ёж Соник

Во время редактирования файла персонажа, я нашел переменную, отвечающую за скорость поворота персонажа. И тут я решил немного “окирпичить” персонажа:

Очень маленькое значение
Очень маленькое значение

XDDD

Новое значение
Новое значение

Вернемся к анимациям. Добавлять анимации совсем не сложно, это не заняло много времени.

Анимации ходьбы, бега и простоя:

Анимация ходьбы, ускоренная в 40 раз выглядит забавно:

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

Удовлетворительный результат.

С анимациями движения все.

Механизмы

Карманная дрель. Добывает ресурсы под собой:

Из небольших изменений – я изменил коллизию полого фундамента. Раньше нельзя было провалиться в “дырку”. После изменения коллизии это стало возможным.

 

В следующем выпуске

Каким будет сюжет, использование* нейросети, взаимодействие между механизмами

Протагонист Син
Протагонист Син

Комментарии (0)