Компания-разработчик симулятора City Car Driving опубликовала новый выпуск «Дневников разработчиков» под номером 27 после длительного перерыва в серии технических заметок. В этом выпуске разработчики решили поделиться опытом реализации таких игровых механик, как открытие и закрытие окон автомобиля, а также работа стеклоочистителей. По мнению студии, эта информация может быть полезна для других разработчиков игр на движке Unreal Engine.
На первом видео – подготовка к созданию механики "открытие | закрытие окон".
- Сначала создаётся компонент контроллера окон, который принадлежит базовому классу. Это делается для того, чтобы в дальнейшем при добавлении новых машин игрока, данный контроллер автоматически попадал на них без дополнительных доработок.
- Далее прописывается сама логика контроллера. Для начала получаем ссылку на автомобиль. Целью этого является получение активной машины, которой управляет игрок в данный момент.
- После, в сам автомобиль нужно добавить компоненты окон, им присваивается тэг – для того, чтобы контроллер автоматически находил окна по указанным тэгам.
- После добавления тэгов, реализовывается сама логика автоматического поиска окон. Ищем тэги через циклы и записываем ссылку на окна. Дальнейшая логика уже будет обращаться по этим ссылкам к окнам, чтобы открывать и закрывать их.
- На данном этапе главное сразу правильно определить тип класса, к которому обращаться при поиске окон. На видео видно, что с первого раза это было сделано неправильно. В viewport (где и была модель машины), разработчиком подбирались данные трансформации, которые будут участвовать в дальнейшей логике. Во время этой процедуры, обнаружилась проблема неверного класса и пришлось менять класс в циклах автоматического поиска окон, из-за чего появились ошибки.
- Разработчики также обращают внимание на особенность работы с Blueprint в Unreal Engine. В определенных ситуациях при смене класса объекта может потребоваться ручная корректировка логики, так как не все ноды (узлы) в Blueprint автоматически перезагружаются. Это важный нюанс, который следует учитывать при разработке игровых механик.
Второе видео – самое длинное, здесь и происходит основной рабочий процесс.
- После того, как первоочередная логика была написана, требуется написать фильтр ввода: как системе ввода понимать и передавать логические данные при нажатии на кнопку.
- При создании новых игровых механик команда разработчиков City Car Driving придерживается практики использования уже существующего кода в качестве основы. Это объясняется тем, что базовая логика многих механик часто одинакова, и с точки зрения эффективности нет смысла каждый раз писать ее заново. Такой подход позволяет экономить рабочее время и сосредоточиться на уникальных аспектах новой механики. В начале видео, демонстрирующего процесс разработки, можно заметить, что часть кода уже подготовлена заранее.
- После выбора подходящего фрагмента кода в качестве основы, разработчики адаптируют его для реализации новой механики. В случае с окнами автомобиля, на этом этапе прописывается логика действий, которые будут происходить при нажатии игроком кнопки открытия или закрытия окна.
- Затем создается функция, отвечающая за взаимодействие с контроллером окон и вызывающая событие «запустить моторчик окон». Работа самого «моторчика окон» реализуется с помощью дополнительных математических функций внутри фильтра ввода.
- Также, необходимо реализовать следующую логику при ограничении: «Должна быть одна кнопка для одного окна». Как мы сделали:
- Когда кнопка нажимается, если окно полностью закрыто, оно начинает открываться.
- Если кнопку отпустить, то окно останется в текущей позиции.
- При повторном нажатии на кнопку, окно должно продолжить опускаться, если после предыдущего отпускания кнопки не прошло 3-х секунд. Это сделано для того, чтобы игрок мог выбрать нужную степень открытия окна.
- Если прошло более 3-х секунд, то, скорее всего, игрок хочет закрыть окно, поэтому окно должно начать закрываться.
- Если игрок опустил окно полностью, то, сразу же при повторном нажатии кнопки «окно», оно должно начать подниматься без ожидания 3-х секунд.
- Данная логика реализована только на математических операциях и состояниях окна. В итоге, фильтр отправляет только одно значение: на какой позиции должно находится окно в измерении от 0.0 до 1.0.
Теперь нужно реализовать трансформацию модели окна на основе того, какие данные приходят с фильтра ввода.
- Предварительно, на данном этапе нужно определиться, как будет перемещаться окно: по каким осям; линейно или нелинейно; нужен ли сплайн для перемещения окна.
- Было решено, что окно будет перемещаться линейно с одинаковой скоростью по сплайну, так как мы делаем легковые автомобили. Их окна не открываются просто вверх / вниз. Под обшивкой двери в реальных машинах есть направляющие окна, у нас этими направляющими послужили сплайны.
- Для каждой машины можно настроить ход окна под конкретную модель.
- Выходит текущая трансформация окна на сплайне. Мы конвертируем значение координат в значения от 0 до 1, и перемещаем окно в новые координаты. Оформляем все эти вычисления трансформации в функцию для оптимизации, так как данные вычисления вызываются каждый кадр, пока перемещается окно.
Функция "открытие | закрытие окон" готова! На последнем видео, можно посмотреть, как оно выглядит.
В качестве дополнительного материала разработчики прилагают видео, демонстрирующее процесс создания контроллера стеклоочистителей. По своей сути, логика работы этого контроллера схожа с логикой контроллера окон. Разработчики также получают ссылку на объект автомобиля и проводят автоматический поиск стеклоочистителей.
Однако, в отличие от окон, здесь добавлена проверка на наличие стеклоочистителей, поскольку не все автомобили оснащены задним стеклоочистителем. Еще одно существенное отличие заключается в работе фильтра ввода: в случае со стеклоочистителями требуется только нажатие кнопки для изменения режима (скорости) их работы.
В контроллере стеклоочистителей разработчики получают необходимое значение скорости перемещения и передают его в анимацию, заранее подготовленную 3D-художниками.
Теперь можно посмотреть результат.
В представленных видеоматериалах можно заметить различные графические артефакты. Разработчики подчеркивают, что работа над проектом все еще ведется, и текущий результат не является финальным.

комментариев нет