Создание динамического sci-fi моста в Unreal Engine 4.Привет всем!Как создать динамический мост с возможностью его регулировки по длине?Для формирования структуры моста понадобится несколько Static Meshes:Основная секция моста, которая будет приводится в движениеНачальная (она же конечная секция) моста с расположенными местами под цилиндрические пиныСекция боковых перилНачальная секция перилМодель выдвигающихся пиновМодели секций мостаТехнически мост состоит из нескольких основных компонентов на основе 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 для начальной и конечной секции моста, стартовых секций и финальных секций перил и двух выдвигающихся цилиндрических пинов:Сборка и разборка моста происходит следующим образом:Формируется массив 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В зависимости от состояния моста - разобран или собран целевые и стартовые Rotation равны 0 или 90 градусов для Pitch.Дополнительно в актёре моста присутствуют collision shape для блокировки проходимости моста в момент процесса сборки/разборки в районе выдвигающихся пинов и боковые collision объемы ограничивающие движение персонажа в зоне перил.Звуковой компонент состоит из трёх частей:Стартовый звукЗацикленный (seamless) звук во время поворота секцийФинальный звук для состояния собранного/разобранного мостаДополнительные возможности и настройки:Мост поддерживает “питание” от электричества. Т.е. мост для работы использует “электричество” от Power Box. Если электричество иссякло, процесс сборки-разборки останавливается в текущей стадии либо не может быть запущен.Отдельная регулировка скорости сборки и разборки мостаBatch разборка моста - все секции поворачиваются одновременно без расхождений в углах поворотаНастраиваемое расхождение между секциямиСтартовое состояние: собран или разобранИндикация на секциях: красным разобрано, голубым - мост собранНа сегодня всё, благодарю за внимание!
Комментарий недоступен
Так, а как объясняется практичность такой конструкции в рамках сеттинга? В том смысле, что зачем вообще нужно убирать мост, и почему именно таким способом?
Геимплей основные задачи две:
Отсечь / скинув в низ ботов разобрав мост.
Дать выбор куда использовать Power Box.
Фактически мост это переменный фактор.
Визуально:
Такой способ сборки-разборки более выгодно визуально, чем просто поднять или опустить заграждение.
Предположу что для движения(полёта) вниз. Первое что в голову пришло.
Красиво!
Захотелось повторить)
Я так понимаю, статью писал ты сам.
Круто, респект) Нужно больше статей богу статей!
Thank you! )