Dynamic Bridge

Создание динамического sci-fi моста в Unreal Engine 4.

Привет всем!

Как создать динамический мост с возможностью его регулировки по длине?

Для формирования структуры моста понадобится несколько Static Meshes:

  • Основная секция моста, которая будет приводится в движение
  • Начальная (она же конечная секция) моста с расположенными местами под цилиндрические пины
  • Секция боковых перил
  • Начальная секция перил
  • Модель выдвигающихся пинов
Модели секций моста​
Модели секций моста​

Технически мост состоит из нескольких основных компонентов на основе Hierarchical Instanced Static Mesh component:

​Hierarchical Instanced Static Mesh component'ы
​Hierarchical Instanced Static Mesh component'ы
  • Левая сборная сторона моста
  • Правая сборная сторона моста
  • Левая составная сторона перил
  • Права составная сторона перил

Регулировка по длине происходит с помощью добавления нужного количества копий Instances в Hierarchical Instanced Static Mesh comp:

​Реглировка по длине

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

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

Стартовая и сборная секции созданы из расчета ширины в 1 метр. Минимальная длина моста 4 метра плюс 2 метра на стартовую и конечную секцию.

Дополнительно используется несколько Static Mesh для начальной и конечной секции моста, стартовых секций и финальных секций перил и двух выдвигающихся цилиндрических пинов:

Dynamic Bridge

Сборка и разборка моста происходит следующим образом:

Формируется массив transform’ов для каждой в зависимости от кол-ва секций моста. . Каждый transform рассчитывается исходя из параметр BlendTime, который может иметь значение от 0 до 1.0.

Если значение BlendTime отрицательно мы его отсекаем с помощью clamp float до значения 0.

Чтобы секции моста разбирались с отставанием всё что нужно - заполнить массив BlendTime начиная от значение 0 для первой секции и далее с заданным шагом в отрицательную сторону для всех остальных секций.

Т.е. получим массив в виде:

0.0, -0.1, -0.2, -0.3 ….. - 3.0

Каждое значение в массиве соответствует одной секции моста.

Пересчитывая и изменяя эти значения в положительную сторону (с учетом delta time) мы получаем значение, которое используется для интерполяции между стартовым Rotation и целевым Rotation.

Далее, просчитанные transform поворота мы отправляем в HISM с помощью функции Batch Update Transfoms, которая на вход принимает массив transform'ов:

​Batch Update Transfoms
​Batch Update Transfoms

В зависимости от состояния моста - разобран или собран целевые и стартовые Rotation равны 0 или 90 градусов для Pitch.

Дополнительно в актёре моста присутствуют collision shape для блокировки проходимости моста в момент процесса сборки/разборки в районе выдвигающихся пинов и боковые collision объемы ограничивающие движение персонажа в зоне перил.

Звуковой компонент состоит из трёх частей:

  • Стартовый звук
  • Зацикленный (seamless) звук во время поворота секций
  • Финальный звук для состояния собранного/разобранного моста

Дополнительные возможности и настройки:

  • Мост поддерживает “питание” от электричества. Т.е. мост для работы использует “электричество” от Power Box. Если электричество иссякло, процесс сборки-разборки останавливается в текущей стадии либо не может быть запущен.
  • Отдельная регулировка скорости сборки и разборки моста
  • Batch разборка моста - все секции поворачиваются одновременно без расхождений в углах поворота
  • Настраиваемое расхождение между секциями
  • Стартовое состояние: собран или разобран
  • Индикация на секциях: красным разобрано, голубым - мост собран

На сегодня всё, благодарю за внимание!

1919 показов
2K2K открытий
22 комментария

Комментарий недоступен

Ответить

Так, а как объясняется практичность такой конструкции в рамках сеттинга? В том смысле, что зачем вообще нужно убирать мост, и почему именно таким способом?

Ответить

Геимплей основные задачи две:
Отсечь / скинув в низ ботов разобрав мост. 
Дать выбор куда использовать Power Box.

Фактически мост это переменный фактор.

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

Ответить

Предположу что для движения(полёта) вниз. Первое что в голову пришло.

Ответить

Красиво! 
Захотелось повторить)

Ответить

Я так понимаю, статью писал ты сам.
Круто, респект) Нужно больше статей богу статей!

Ответить

Thank you! )

Ответить