Как сделать коллайдер в ue4

Обновлено: 06.07.2024

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

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

Шейдер в UE4. Если создать Material Instance, станет возможным налету изменять параметры шейдера и сразу же видеть результат.

Шейдер в UE4. Если создать Material Instance, станет возможным налету изменять параметры шейдера и сразу же видеть результат.

Прежде всего, надо понимать, что несмотря на визуальную сложность, шейдер состоит из простейших слоёв, скомбинированных вместе. Шейдер содержит слои:

  • Внутреннее сияние - Inner Glow
  • Пульсирующий внутренний туман - Pulsing Fog
  • Два слоя тумана - Fog Front и Fog Background
  • Два слоя искр - Sparks Front и Front Back
  • Три корректирующих слоя типа "Fresnel"
  • Сияние по краям - Edge Glow

Внутреннее сияние - Inner Glow

Данный слой представляет собой простейшую функцию Fresnel. Параметры функции подобраны так, чтобы по центру сферы была видна светящаяся "изюминка".

Пульсирующий туман - Pulsing Fog

Пульсирующий туман сделан с помощь простейшей текстуры, сгенерённой в Photoshop. Текстура умножается на обычный синус - его аргументом является время.

Пульсирующий туман. Обратите внимание на узел Add, сразу после синуса. Он нужен, чтобы яркость слоя была только позитивной.

Пульсирующий туман. Обратите внимание на узел Add, сразу после синуса. Он нужен, чтобы яркость слоя была только позитивной.

Далее пульсирующий туман "умножается" на внутреннее свечение. Что из этого получается - на картинке ниже.

Fog Front и Fog Background

Как и всё, что есть в шейдере - это очень простые слои. В каждом слое использованы 2 бесшовные текстуры типа "Clouds", сгенерированные в Фотошоп. Для семплинга каждой из текстур используется Panner, причём паннеры имеют разную скорость. Текстуры перемножаются сначала друг на друга, а затем на цвет.

Результаты из обоих "слоёв тумана" далее просто суммируются. В результате материал получается глубину.

Sparks Front и Front Back

Эти два слоя подобны предыдущим двум, но их цель - создать искры, движущиеся внутри объекта.

Единственная особенность, которую можно выделить в этих слоях: для выборки текстур (текстура с набором точек, сгенерированная в Фотошоп) используется комбинация узла Panner и простейшей карты нормалей - благодаря этому искры при движении немного колыхаются. Также из слоя "Sparks Back" вычитается один из слоёв тумана - таким образом достигается эффект, будто бы искры скрываются слоем тумана.

Как и в случае тумана, два слоя искр смешиваются друг с другом обычным сложением.

Корректирующие слои типа "Fresnel"

Корректирующие слои, типа "1-Fresnel" используются для уменьшения светимости всех ранее созданных слоёв. Это даёт возможность уменьшить силу искр и тумана по краям шара.

​Реакции столкновения (Collision Responses) и реакции трассировки (Trace Responses) формируют основу для обработки столкновений и бросания лучей (ray casting) UE4 во время игры. Каждый объект, который может сталкиваться, получает объектный тип и ряд реакций, которые определяют как он будет взаимодействовать со всеми другими типами объектов. Когда происходит столкновение или событие пересечения, у всех взаимодействующих объектов может быть установлено воздействие или реакция на воздействие следующим образом: блокировкой, игнорированием или событием пересечения.

Trace Response в основном работает также, за исключением того, что сама трассировка (ray cast) может быть назначена как один из типов Trace Response, таким образом позволяя Actor либо блокировать его, либо игнорировать, основываясь на их Trace Response.

Взаимодействия

Нужно иметь ввиду несколько правил, по которым обрабатываются столкновения:

  • Блокировка естественно случится между двумя или более Actor, если у них установлено Block. Однако чтобы произошло событие попадания (Hit Event), которое используется в блюпринтах, разрушаемых Actor (Destructible Actor), триггерах и т.д., должен быть включен Simulation Generates Hit Events.
  • Установка у Actor Overlap часто выглядит так, как будто объекты игнорируют друг друга - без включения Generates Overlap Events, по сути Overlap работает также как Ignore.
  • Чтобы объекты блокировали друг друга, у всех должно быть выставлено Block в соответствующих типах объектов.
  • Для взаимодействующих объектов: если у одного стоит Overlap а у другого Block, то при столкновении сработает overlap а не block.
  • Overlap Event может быть сгенерировано даже если у объекта включен Block, особенно при движении на высокой скорости.
    • не рекомендуется для объекта иметь и событие пересечения и событие столкновения. Это требует ручной настройки.

    ​Для целей тестирования уровней и осмотра вашего мира:

    • В режиме по умолчанию Play In Editor камера является Pawn. Она может быть заблокирована любым Pawn с включенным Block.
    • В режиме Simulate In Editor камера, пока не вселилась во что-нибудь, не является Pawn. Она может свободно проходить сквозь все препятствия и не создает никаких событий и коллизий.

    ​Примеры взаимодействий при столкновениях

    Эти взаимодействия предполагают что у всех объектов в пункте Collision Enabled стоит Collision Enabled, так что они настроены на полное столкновение со всем. Если же коллизия выключена, это будет аналогично установке Ignore во всех пунктах Collision Responses.

    В следующем разделе будут даны настройки для объяснения происходящего:


    Здесь шар - PhysicsBody, a стена - WorldDynamic, и изменяя их настройки столкновения мы можем получить различные поведения.

    Столкновение

    Установив у обоих объектов в настройках коллизии блокировать друг друга, мы получим хороший пример взаимодействия объектов:


    Настройки коллизий шара Настройки коллизий Стенки


    В этом случае шар это PhysicsBody и он настроен на блокировку WorldDynamic (которой является стена). Стена это WorldDynamic и она установлена на блокировку PhysicsBody (которым является шар).

    В этом случае шар и стена просто столкнутся; никаких дополнительных уведомлений о столкновении не будет.

    Столкновение и генерирование Hit Event

    Просто столкновение полезно и в целом это достаточный минимум для физических взаимодействий, но если вы хотите чтобы возникало событие столкновения для срабатывания блюпринта или участка кода:


    Настройка коллизий шара Настройка коллизий стены


    Как и в предыдущем примере, шар это PhysicsBody и он настроен на блокировку WorldDynamic (которой является стена). Однако у него также включен Simulation Generates Hit Event, так что он будет сам вызывать событие каждый раз, когда сталкивается с чем-нибудь. Стена это WorldDynamic и она настроена на блокировку PhysicsBody (которым является шар). Поскольку у стены не включен Simulation Generates Hit Event, она не станет генерировать событие столкновения.

    С установкой у шара Simulation Generates Hit Event, он будет знать когда столкнется с чем-либо. В результате выдаются события в блюпринте шара, такие как RecieveHit и OnComponentHit. А вот у стены, если произойдет столкновение, никакого события не возникнет, так как она себе не сообщит об этом.

    Пересечение и игнорирование (Overlap и Ignore)

    Для всех намерений и целей, Overlap и Ignore работают точно также, как если Generate Overlap Events отключен. В этом случае шар настраивается на пересечение или игнорирование стены:


    Настройки Коллизий Шара Настройки Коллизий Стены


    Здесь шар настроен на пересечение с объектами WorldDynamic (как наша стена), но у него не включен Generate Overlap Events. Таким образом настроенный шар ни с чем не столкнется и не пересечется, то есть проигнорирует нашу стену. Стена является WorldDynamic и настроена на блокировку объектов PhysicsBody (которым является шар). Как указано выше, оба объекта должны быть настроены на блокировку соответствующих типов объектов, иначе столкновения не произойдет.

    Настройки Коллизий Шара Настройки Коллизий Стены


    Здесь шар настроен на игнорирование WorldDynamic ( таких как наша стена), и он пройдет сквозь стену. Стена является WorldDynamic и настроена на блокировку PhysicsBody (которым является наш шар). Как показано выше, оба объекта должны быть настроены на блокировку типов друг друга, иначе столкновения не произойдет.

    Пересечение и генерирование события пересечения (Overlap Event)

    В отличие от столкновений, которые срабатывают каждый кадр, события пересечения срабатывают в начале (RecieveBeginOverlap) и в конце (RecieveEndOverlap) пересечения.

    Для того, чтобы случилось пересечение, нужно чтобы у обоих Actor'ов был включен пункт Generate Overlap Events. Это сделано для производительности.

    Чтобы собрать игру, нужна некая среда с определёнными техническими условиями и необходимыми инструментами. В качестве такой среды выступает игровой движок. Unreal Engine 4 — один из самых популярных движков, который используют как крупные компании, так и небольшие инди-студии. К примеру, на UE4 созданы Final Fantasy VII Remake, Returnal, Gears 5, Borderlands 3, Fortnite, Abzû, Observer и многие другие.

    Разработчик игр на Unreal Engine 4: что умеет, сколько зарабатывает и почему UE4 — отличный выбор для начинающего специалиста

    Владимир Семыкин

    Энтузиаст геймдизайна, автор Нетологии

    Почему Unreal Engine 4 — один из лучших движков для работы над играми

    Есть несколько причин большой популярности UE4.

    UE4 поддерживает большое количество функций, благодаря чему в нём можно создать практически любую игру.

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

    Движком можно пользоваться бесплатно: в лицензионном соглашении Unreal Engine указано, что пока ваша игра не принесёт более $1 000 000 — после этого придётся платить 5% от дохода.

    Есть возможность сделать игру, которая запустится на всех популярных платформах: PlayStation, Xbox, Switch, ПК, iOS, Android.

    У движка огромное сообщество пользователей, которые создают обучающие материалы, делятся друг с другом опытом и помогают решать проблемы. Дополнительный плюс большого сообщества — множество игровых ассетов, доступных для свободного использования в своём проекте.

    Разработчик игр на Unreal Engine 4: что умеет, сколько зарабатывает и почему UE4 — отличный выбор для начинающего специалиста

    Epic Games постоянно устраивает бесплатные раздачи ассетов, которые могут пригодиться при разработке игры

    Большое преимущество Unreal Engine 4 в универсальности и доступности — его могут использовать как опытные разработчики, так и новички, которые впервые берутся за создание игры. Всё дело в том, что UE4 по умолчанию поддерживает сразу два языка программирования: текстовый C++, в котором нужно писать строчки кода, и визуальный язык Blueprints, в котором игровая логика выстраивается при помощи связанных между собой блоков. Такой подход помогает сделать программирование более наглядным и понятным для тех, у кого нет опыта.

    «Blueprints разработала компания Epic Games, чтобы дать инструменты программирования людям, которые далеки от этого. Поэтому научиться работать с Blueprints очень легко. Конечно, необходимо получить минимальную теоретическую базу, например, разобраться, что такое переменные и как работает функциональное и объектно-ориентированное программирование.

    Разработчик игр на Unreal Engine 4: что умеет, сколько зарабатывает и почему UE4 — отличный выбор для начинающего специалиста

    Пример логики для шарика, который отскакивает от препятствий и теряет скорость после каждого столкновения

    Большое преимущество Blueprints в том, что с его помощью можно быстро собрать базовый геймплей для игры.

    Если тебя посылают в гугл — это не значит, что хотят тебя обидеть\унизить\самоутвердиться за твой счет. Это всего лишь означает, что твой вопрос довольно элементарен и у тебя наверняка получится найти ответ самостоятельно. От этого выиграют все — ты повысишь свой скилл гугления, лучше разберешься, а остальные не потратят свое время на повторение в сотый раз того, что и так легко найти.

    Если ты уже прошерстил первые 2–3 страницы гугла и ничего не нашёл, удостоверься, что ты правильно гуглишь:

    • твои запросы должны быть на английском с припиской в конце unreal engine (например, set start level unreal engine)
    • постарайся как можно сильнее обобщить запрос, например, не “как перекрасить кубик когда у меня игрок нажмет кнопку”, а “change material parameter on button event unreal engine”.

    Посоветуйте с чего начать. Курсы, ссылки, вот это все.


    Освещение постоянно меняется, то светлеет, то темнеет.

    Так работает автоэкспозиция. Отключить её совсем или настроить можно через постпроцесс. Для отключения выставьте минимальное и максимальное значение одинаковым в разделе экспозиции в настройках постпроцесса. Убедитесь, что вы попадаете в объем постпроцесса, либо что он бесконечный (галочка Unbound). Что-то еще узнать по этой теме можно прогуглив “auto exposure unreal engine”.


    Объекты исчезают при отдалении камеры.

    • Проверяем лоды: нужно проверить как выглядит ассет в разных лодах, возможно в одном из них его не видно вовсе. Так же у лодов есть возможность скрывать объект в зависимости от настроек графики (пробить этот вариант можно выставив все пункты скалабилити на эпик).
    • Проверяем дистанцию прорисовки у объектов (кулинг): у одних ассетов на уровне (например, статик или скелетал меши) это настройка draw distance, у других (например, у фолиажа) это cull distance
    • Проверяем материал: ищем в материале все ноды, которые так или иначе могут быть связанны с дистанцией или глубиной пикселей, например функция CameraDepthFade или Distance_Blend или просто Camera Distance в сочетании с Absolute World Position может скрывать объект на определенной дистанции от камеры
    • Баунд боксы: проверяем достаточен ли размер баунд бокса объекта для отображения, можно попробовать сильно увеличить баунд бокс для проверки.


    Импортирую меш, а он раздельными кусками в движке. Как импортировать одним мешем?

    Самым лучшим решением будет объединить меш в любом 3D пакете, но, если такой возможности нет, то в окне импорта нужно поставить галочку Combine Meshes.


    Импортирую меш, а пивот не там, где в 3д пакете.

    Сбросьте позицию модели в 0.0.0. в 3D редакторе, чтобы ось координат и пивот совпадали, тогда он импортируется корректно.


    Можно ли поменять пивот в движке?

    Конечно проще и лучше сделать это изначально в 3D редакторе, но если вам этот способ не подходит, то можно делать так или так.

    А что насчет целых сцен? Как импортировать разом сцену, сохраняя и пивоты объектов и позиции?

    Импорт целых сцен разом — кейс нетривиальный. С дефолтными настройками импорта у вас сохранятся позиции на сцене, но пивотом у всех объектов станет 0.0.0 сцены.


    Если при импорте убрать галочку Transform Vertex to Absolut, то у каждого объекта будут сохранены пивоты, но позиции на сцене не сохранятся.


    Чтобы сохранить и позиции и пивоты объектов, можно импортировать сцену через File — Import Into Level. Пивоты объектов сохранятся, а сами объекты будут расставлены на уровне как в 3D пакете. Так же там есть опция импортировать сразу как отдельную сцену в блюпринт акторе.

    Читайте также: