Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Краткое содержание:
Вступление
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 вечер я набросал вот такой интерфейс для кислородного наполнителя:
Настало время переводить это в анрил =D
Перед тем, как создавать UI механизмов, нужно понять, как его выводить. Чтобы вывести UI, нужно его инициализировать. Чтобы инициализировать, нужно найти класс блюпринта UI.
Спустя несколько вечеров… У меня получилось вывести UI созданный не через C++. (P.S. Если прописывать интерфейс кодом, что крайне непросто, то его гораздо легче выводить на экран. Из за простоты я создавал UI через редактор интерфейсов - UMG)
Еще, при открытии UI механизма было бы неплохо ограничивать игрока в передвижении и осмотре. *Спустя несколько вечеров*. Наконец, мне удалось реализовать эту «простую» фичу. Чего я только не пробовал: удалять компонент движения, расширять логику движений, изменять текущее состояние (падение, плавание, ходьба). Решением стало изменения способа ввода (игра/UI), но на этом проблемы не закончились… Если войти в UI механизма с зажатой кнопкой передвижения, то при выходе персонаж продолжал двигаться, даже когда кнопка не нажата. На форуме я нашел решение.
Только после этого, все стало работать как надо.
И тут новая проблема. Через случайный промежуток времени после запуска, UI переставал открываться. Сопровождалось это все вылетом с ошибкой «EXCEPTION_ACCESS_VIOLATION reading address 0x0000000000000000». Такого рода ошибки вылезают из за обращения к нулевому указателю. В моем случае проблема была в том, что сборщик мусора удалял переменные с UI. Решилось это тем, что я обернул все переменные, которые хоть как то относятся к UI в UPROPERTY().
Наконец, UI готов. Итоговая версия слегка отличается от прототипа.
В правой части скорее всего будут настройки для автоматизации, но об этом пока говорить еще слишком рано. Все механизмы в качестве энергии будут использовать SEP (Superindustry Energy Points).
Остался UI для карьера. Здесь все немного сложнее. В UI карьера присутствует инвентарь. Для его реализации нужно довольно много времени. По этому UI карьера будет реализован в следующем выпуске.
Анимации
Настало время “оживить” нашего астронавта. Для этого мы еще в предыдущем выпуске нашли необходимые анимации. Начнем с бега. Для того, чтобы проигрывать анимацию бега, нужно сначала прописать логику бега.
В этом отрывке кода выполняется привязка функций к событиям. Например: при активации события "Turn Right / Left Mouse" (а это событие активируется, когда игрок шевелит мышкой) вызывается функция движения камерой. По этому принципу я привязал функцию бега к новому событию.
Во время редактирования файла персонажа, я нашел переменную, отвечающую за скорость поворота персонажа. И тут я решил немного “окирпичить” персонажа:
XDDD
Вернемся к анимациям. Добавлять анимации совсем не сложно, это не заняло много времени.
Анимации ходьбы, бега и простоя:
Анимация ходьбы, ускоренная в 40 раз выглядит забавно:
Осталось добавить прыжок. С ним пришлось помучаться. Логика прыжка присутствует по умолчанию, очень сложно оказалось найти нормальные анимации. На Mixamo я еле как нашел анимацию начала прыжка, нахождения в воздухе и конца прыжка. Просидев половину вечера, мне удалось связать все это вместе.
Удовлетворительный результат.
С анимациями движения все.
Механизмы
Карманная дрель. Добывает ресурсы под собой:
Из небольших изменений – я изменил коллизию полого фундамента. Раньше нельзя было провалиться в “дырку”. После изменения коллизии это стало возможным.
В следующем выпуске
Каким будет сюжет, использование* нейросети, взаимодействие между механизмами