Что нового в City Car Driving 2.0? Ответы в 27-м выпуске "Дневников разработчиков"

Компания-разработчик симулятора City Car Driving опубликовала новый выпуск «Дневников разработчиков» под номером 27 после длительного перерыва в серии технических заметок. В этом выпуске разработчики решили поделиться опытом реализации таких игровых механик, как открытие и закрытие окон автомобиля, а также работа стеклоочистителей. По мнению студии, эта информация может быть полезна для других разработчиков игр на движке Unreal Engine.

На первом видео – подготовка к созданию механики "открытие | закрытие окон".

  • Сначала создаётся компонент контроллера окон, который принадлежит базовому классу. Это делается для того, чтобы в дальнейшем при добавлении новых машин игрока, данный контроллер автоматически попадал на них без дополнительных доработок.
  • Далее прописывается сама логика контроллера. Для начала получаем ссылку на автомобиль. Целью этого является получение активной машины, которой управляет игрок в данный момент.
  • После, в сам автомобиль нужно добавить компоненты окон, им присваивается тэг – для того, чтобы контроллер автоматически находил окна по указанным тэгам.
  • После добавления тэгов, реализовывается сама логика автоматического поиска окон. Ищем тэги через циклы и записываем ссылку на окна. Дальнейшая логика уже будет обращаться по этим ссылкам к окнам, чтобы открывать и закрывать их.
  • На данном этапе главное сразу правильно определить тип класса, к которому обращаться при поиске окон. На видео видно, что с первого раза это было сделано неправильно. В viewport (где и была модель машины), разработчиком подбирались данные трансформации, которые будут участвовать в дальнейшей логике. Во время этой процедуры, обнаружилась проблема неверного класса и пришлось менять класс в циклах автоматического поиска окон, из-за чего появились ошибки.
  • Разработчики также обращают внимание на особенность работы с Blueprint в Unreal Engine. В определенных ситуациях при смене класса объекта может потребоваться ручная корректировка логики, так как не все ноды (узлы) в Blueprint автоматически перезагружаются. Это важный нюанс, который следует учитывать при разработке игровых механик.

Второе видео – самое длинное, здесь и происходит основной рабочий процесс.

  • После того, как первоочередная логика была написана, требуется написать фильтр ввода: как системе ввода понимать и передавать логические данные при нажатии на кнопку.
  • При создании новых игровых механик команда разработчиков City Car Driving придерживается практики использования уже существующего кода в качестве основы. Это объясняется тем, что базовая логика многих механик часто одинакова, и с точки зрения эффективности нет смысла каждый раз писать ее заново. Такой подход позволяет экономить рабочее время и сосредоточиться на уникальных аспектах новой механики. В начале видео, демонстрирующего процесс разработки, можно заметить, что часть кода уже подготовлена заранее.
  • После выбора подходящего фрагмента кода в качестве основы, разработчики адаптируют его для реализации новой механики. В случае с окнами автомобиля, на этом этапе прописывается логика действий, которые будут происходить при нажатии игроком кнопки открытия или закрытия окна.
  • Затем создается функция, отвечающая за взаимодействие с контроллером окон и вызывающая событие «запустить моторчик окон». Работа самого «моторчика окон» реализуется с помощью дополнительных математических функций внутри фильтра ввода.
  • Также, необходимо реализовать следующую логику при ограничении: «Должна быть одна кнопка для одного окна». Как мы сделали:
  • Когда кнопка нажимается, если окно полностью закрыто, оно начинает открываться.
  • Если кнопку отпустить, то окно останется в текущей позиции.
  • При повторном нажатии на кнопку, окно должно продолжить опускаться, если после предыдущего отпускания кнопки не прошло 3-х секунд. Это сделано для того, чтобы игрок мог выбрать нужную степень открытия окна.
  • Если прошло более 3-х секунд, то, скорее всего, игрок хочет закрыть окно, поэтому окно должно начать закрываться.
  • Если игрок опустил окно полностью, то, сразу же при повторном нажатии кнопки «окно», оно должно начать подниматься без ожидания 3-х секунд.
  • Данная логика реализована только на математических операциях и состояниях окна. В итоге, фильтр отправляет только одно значение: на какой позиции должно находится окно в измерении от 0.0 до 1.0.

Теперь нужно реализовать трансформацию модели окна на основе того, какие данные приходят с фильтра ввода.

  • Предварительно, на данном этапе нужно определиться, как будет перемещаться окно: по каким осям; линейно или нелинейно; нужен ли сплайн для перемещения окна.
  • Было решено, что окно будет перемещаться линейно с одинаковой скоростью по сплайну, так как мы делаем легковые автомобили. Их окна не открываются просто вверх / вниз. Под обшивкой двери в реальных машинах есть направляющие окна, у нас этими направляющими послужили сплайны.
  • Для каждой машины можно настроить ход окна под конкретную модель.
  • Выходит текущая трансформация окна на сплайне. Мы конвертируем значение координат в значения от 0 до 1, и перемещаем окно в новые координаты. Оформляем все эти вычисления трансформации в функцию для оптимизации, так как данные вычисления вызываются каждый кадр, пока перемещается окно.

Функция "открытие | закрытие окон" готова! На последнем видео, можно посмотреть, как оно выглядит.

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

Однако, в отличие от окон, здесь добавлена проверка на наличие стеклоочистителей, поскольку не все автомобили оснащены задним стеклоочистителем. Еще одно существенное отличие заключается в работе фильтра ввода: в случае со стеклоочистителями требуется только нажатие кнопки для изменения режима (скорости) их работы.

В контроллере стеклоочистителей разработчики получают необходимое значение скорости перемещения и передают его в анимацию, заранее подготовленную 3D-художниками.

Теперь можно посмотреть результат.

В представленных видеоматериалах можно заметить различные графические артефакты. Разработчики подчеркивают, что работа над проектом все еще ведется, и текущий результат не является финальным.

31 мая 2024 г.
Теги:

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

Оставьте ответ