Как сделать смерть в unreal engine

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

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

enter image description here

enter image description here

Очевидно, что на сцене есть три актера камеры, которые должны переключаться между первой камерой, рассматриваемой через 1-й CameraActor, следовательно, соединение переменной EventBeginPlay с переменной Set View Target With Blend, к которой подключен актер 1-й камеры. Когда нажата кнопка воспроизведения, сюжет, просматриваемый с первой камеры, отображается на экране по желанию, но при нажатии левой кнопки мыши прикосновением к сенсорному входу на мобильных устройствах сцена не переключается на вторую камеру, и возникает вопрос: Зачем?

Alexander Dracott поделился некоторыми своими личными советами и фишками, которые сам довольно часто использует.

Импорт текстур в Unreal 4


Сохранение памяти: текстуры Channel-pack


Одна из особенностей Unreal — это большой объем контроля, который вы получаете, создавая свои собственные материалы. Когда вы создаете несколько черно-белых масок для текстур, таких как roughness или transmission, вы можете сэкономить память, спрятав каждую маску в отдельный канал R,G или B, а затем получив доступ к каждому каналу этой текстуры отдельно.

Физически корректный рендеринг


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

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

Повторное использование текстуры


Еще одним удивительным элементом Unreal 4’s Material Editor является то, что он позволяет повторное использование текстуры. Это поможет вам не только сохранить память, но и сэкономить время. Иногда red channel из rock albedo texture можно использовать как черно белую маску для roughness. Текстуру черепицы из Photoshop можно легко наложить на кирпич, а также смешать с другой текстурой для наложения на другие элементы.

Не накладывайте ненужных текстур


Иногда определенные текстуры не нужны. Для 100% неметаллических материалов, таких как древесина или грязь, текстура металла может быть заменена в Material Editor простой константой с плавающей точкой и значением 0. Этот же принцип можно применить для нескольких версий одного и того же материала. Вам не нужны отдельные normal maps, например, для трех разновидностей кирпича, отличающихся по цвету. Можно использовать одну normal map для всех.

Создание набора основных материалов


Повторное использование материала


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

Комментарии и организация материалов

Для сложных материалов Unreal 4 предлагает очень полезные организационные инструменты. Выбор группы нод и нажатие C помещает эти ноды в комментарий, который затем можно перемещать как группу и кодировку цвета. Комментарии (и отдельные ноды) могут содержать базовые текстовые пояснения.

Функции материалов


Функции материалов можно вызвать несколько раз для выполнения определенного набора инструкций. Они создаются вне материала в Content Browser, но затем могут быть вызваны, чтобы упростить их. Они могут содержать свой собственный inputs и могут стать отличным способом сэкономить время, когда нужно вызвать несколько повторяющихся операций.

Материалы листьев


Листва может быть одной из самых сложных вещей, т.к. совсем не просто обеспечить ее правильное отображение в любом игровом движке. В UE4 версии 4.18 существует Foliage Shading Model, которая упрощает эту задачу. Я настоятельно вам ее рекомендую, поскольку она поддерживает передачу подповерхностного слоя, что в большинстве случаев дает преимущества. Кроме того, советую добавить sky light к вашей сцене, чтобы помочь сбалансировать некоторые более темные области сетки листвы, которые могут быть в тени.

Vertex colour


Доступ к цветам Vertex в материалах — одна из моих любимых функций в Unreal 4. Они могут быть невероятно мощными при творческом подходе. От ambient occlusion до masking out wind и world offset для листвы — их универсальность колоссальна. Они особенно полезны при смешивании текстур. Vertex colors можно импортировать из внешнего программного обеспечения 3D или импортировать и нарисовать в редакторе.

Детализированные diffuse и normal


Так как вы можете настроить параметры текстурирования ультрафиолетового излучения, вы можете увеличить детали материала путем смешивания в дополнительном наборе текстур. Обычно это diffuse или normal maps, которые затем поочередно накладываются поверх базовых. Вы можете использовать любой удобный для вас метод, например, такой как Overlay Blend Function, в то время как подробные normal maps могут быть применены путем добавления красного и зеленого каналов к основанию.

Смешивание текстур в материалах


Хотите объединить текстуры в material editor, но знакомы только с режимами смешивания Photoshop? Epic превзошел все ваши ожидания. Наряду со многими полезными функциями материалов он включает в себя большинство режимов смешивания, с которыми знакомы все пользователи Photoshop. От Overlay до Linear Dodge их можно найти в окне палитры внутри Material Editor. Они могут быть особенно полезными для добавления деталей к вашим материалам.

Знание типов источников освещения


Unreal предлагает четыре различных типа света для использования в окружающей среде: Directional, Point, Spot, и Sky light. Свет Directional отлично подходит для наружных зон или любого необычного источника света. Свет Point является всенаправленным, а Spot похож на него, но имеет ограничения, определенные конусом. Sky light может использоваться для добавления света в окружающую среду, захватывая отдаленные части вашей карты. Поддерживаются также пользовательские Cubemaps.

Добавление тумана к вашей сцене


Существует стандартный способ создания всем нам известного обычного плотного тумана. Unreal 4 же предлагает два других способа добавить туман к вашей сцене. Atmospheric Fog реагирует на направленный угол освещения и интенсивность. Он может создать туман, основанный на реальном рассеянном атмосферном свете. Height Fog дает немного больше контроля цвета и позволяет добавить более простой эффект тумана, который становится менее плотным в верхних частях карты и более плотным в нижних частях.

Создание умных световых валов


Съемки с высоким разрешением


Хотя пользовательские видео разрешения могут быть выведены из Matinee, есть быстрый и простой способ сделать кадры в высоком разрешении прямо из редактора. Нажав на маленькую нисходящую стрелку в левом верхнем углу вашего Viewport, вы можете открыть небольшое раскрывающееся меню. Внизу можно открыть окно High Resolution Screenshot window. Оттуда снимки в высоком разрешении могут быть захвачены и отправлены в папку вашего проекта: project/saved/Screenshots folder.

Корректировка цвета и таблицы поиска

Финальные цвета рендеринга можно настроить на основе художественных предпочтений. Хотя существуют опции для базовых настроек, таких как контраст и оттенок, пользовательская коррекция цвета может быть выполнена с использованием таблиц цветового поиска. Эти таблицы допускают сложное преобразование цвета и могут быть сделаны при помощи базового файла, доступного на сайте Epic Unreal 4 и в Photoshop, или в других программах для настройки изображений.

Редактирование световых переходов и бликов


В играх и 3D стало популярным отображать световые переходы и блики, их можно включить и настроить в UE4, используя специальные зоны постобработки — post-process volumes. Световой поток настраивается практически по всем характеристикам. Размер, цвет, интенсивность и порог можно изменить и даже использовать их для маскировки текстур грязи и имитации грязных линз. Аналогично, вспышки также могут быть включены, а их форма и интенсивность регулируются.

Создание глубины резкости


Unreal 4 поддерживает как резкость по Гауссу, так и настраиваемую. Оба эти параметра существуют в настройках Post Process Volumes. Следует также отметить, что инструменты, которые помогают с размытием тонких объектов перед удаленными, иногда могут создавать проблемы. Нужно проявлять осторожность в применении глубины резкости, например, к листве или другим подобным элементам.

Автоэкспозиция и адаптация глаз


Автоматическое управление экспозицией включено по умолчанию и имитирует настройку глаз на яркие или темные области. Эффект является потрясающим, но может создавать постоянно изменяющиеся визуальные переменные, которые трудно поддерживать внутри. Регулировку диапазона экспозиции можно выполнить в настройках volumes после обработки. Её можно отключить, если установить минимальную яркость, равную максимальной. Смещение экспозиции можно использовать для настройки её базовых параметров.

Световые функции


Одна интересная особенность в Unreal 4 — поддержка материалов с функцией освещения. Эти материалы действуют как маски для света и могут использоваться, чтобы сделать что-либо: от пользовательских цветовых вариаций в свете до облачных теней на земле. Они создаются путем установки функции Material Domain to Light в Material Editor, их можно использовать при spot, point и directional lights.

Сэкономьте время, скопировав и вставив


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

А самое крутое — это то, что все, что скопировано из Unreal, можно вставить в текстовый документ. Затем этот текст можно скопировать и повторно вставить на другой уровень Unreal 4.

Режим просмотра и визуализация рендер пасов


Знание того, что составляет ваш образ, является неотъемлемой частью работы в любом 3D-движке и работает в отложенном рендерере, например, UE4 позволяет использовать некоторые полезные режимы просмотра. Нажатие Alt и 1-8 переключается между различными режимами просмотра, такими как Unlit или lighting only, но если вы нажмете кнопку View Mode в окне Viewport, вы можете просмотреть отдельные рендер пасы. Это может быть полезно для просмотра широких диапазонов материалов, таких как roughness.

Рекомендации по производительности


Совсем недавно приобрел Oculus Quest 2, который является довольно удивительным устройством.

Я инженер-программист и геймер. До этого я никогда не пользовался VR, но видел много примеров работы Unreal’s Engine во многих играх. Мне нравится программирование и у меня есть несколько интересных идей, которые я хотел бы воплотить в VR. Я узнал, что два основных фреймворка, используемых большинством VR устройств — это Unity или Unreal. Я выбрал Unreal, так как он основан на C++, и у меня уже есть опыт работы с этим языком.

Быстрый старт Oculus Quest 2 и Unreal Engine 4

С нетерпением ждал возможности написать мои первые программы для VR, просмотрел несколько кратких руководств онлайн, но не нашел ни одного, который бы помог с Quest 2. Несмотря на то, что существует несколько руководств для Oculus Quest и для Unreal Engine 4, ни одно из них не было достаточно полным или современным, чтобы я мог приступить к работе. Самое полное руководство, которое я нашел, было здесь:

Это руководство, написанное Oculus, рассказывает о том, как приступить к работе с Oculus Quest (1), и его стоит прочитать, чтобы получить общую картину. К сожалению, в Oculus нет нового руководства по Quest 2, а в приведенном выше руководстве по Quest 1 не указаны правильные версии программного обеспечения для Quest 2, Unreal Engine, и даже для общей настройки.

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

Совет 1: Используйте Android Studio, чтобы получить Android SDK 29 и NDK 21.3.

Многие из устаревших руководств рекомендуют Android API версии 24, но Quest 2 — это Android OS 10, поэтому следует использовать версию 29. Если вы пропустили инструкцию по установке Android Studio в кратком руководстве, смотрите здесь:

Выбор нужной вам версии Android Software Development Kit (SDK) находится в разделе Configure -> SDK Configuration (Настройка -> SDK Конфигурация). Здесь вы должны выбрать версию 29.

Возможно, вам понадобится установить Java SDK, если у вас его еще нет. Я уже установил OpenJDK 12, и он работает без проблем. Я подозреваю, что что-нибудь версии 8+ должно подойти.

Совет 2: Сборка в Windows

Короче говоря, я смог воспользоваться последней версией Unreal Engine 4 через Epic Games Launcher. Несколько онлайновых руководств предлагали использовать старые версии по разным причинам, но с Quest 2 все они устарели. Используйте последнюю версию.

Совет 3: Укажите версии сборки в Unreal Engine

Шаг 10 из того же раздела говорит, что Unreal Engine получит расположение по умолчанию для Android SDK, Android NDK, и Java SDK. Я обнаружил, что это не всегда работает, но это легко указать вручную. Найдите свой установленный Java SDK и используйте эту версию в настройках. Android Studio установит Android SDK в папку AppData/Local/Android/Sdk для вашего пользователя, а Android NDK — в папку AppData/Local/Android/Sdk/ndk/ для вашего пользователя.

Совет 4: Будьте терпеливы, но разумны.

Unreal Engine, похоже, не всегда сообщает, что делает в фоновом режиме. Если вы обнаружите, что ждете вечно, то проверьте менеджер задач. Разверните задачи под Unreal Engine и вы можете обнаружить несколько запущенных потоков. Это могут быть шейдеры или сборка самого проекта. Если они есть, пока Unreal Engine завис, просто подождите.

И будьте терпеливы. На сборку шейдеров в первый раз может уйти несколько часов, а на перестройку проекта или шейдеров, если что-то пойдет не так, может уйти 30 минут и более.

Еще одна проблема появляется, когда Unreal неверно очищает папки, после того как они закрыты. В некоторых случаях он оставляет Android Studio запущенным (Unreal Engine базируется на Android Studio), или adb. exe запущенным (который взаимодействует с вашим Android устройством), или другие задачи OVR или Epic. Если они запущены, несмотря на то, что сам Unreal Engine закрыт, вы не сможете запустить Unreal Engine снова. Вам, возможно, придется убить эти задачи вручную из диспетчера задач, и как только вы это сделаете, вы сможете снова запустить Unreal Engine.

Совет 5: Не пытайтесь использовать базовый VR проект Unreal Engine.

Oculus в предлагает начать с пустого проекта, и они правы. Базовый VR проект просто не работает. Вам придется создавать многие милые вещи с нуля (или, по крайней мере, из других учебников), но, по крайней мере, вы сможете собирать и развертывать их.

Если вам нужна помощь при запуске самого Unreal Engine, я обнаружил, что следующие руководства были очень хороши:

Совет 6: Магические числа

Однако не сразу понятно, как это сделать, и ответ на этот вопрос — настройка для вашей пешки (pawn):

Это может выглядеть немного странно, так как пол разбивает камеру вашего VR персонажа, но именно это используется Quest 2 и Unreal Engine в качестве подсказки, чтобы понять, что необходимо подстроиться под высоту Quest 2 (настраивается Quest 2, когда вы устанавливаете Oculus Guardian).

Совет 7: Получайте удовольствие

Первое, что я построил, это шкаф. Правда! Я планирую превратить нестандартное пространство в спальне в большой шкаф, но это странный формат даже для шкафа. Я сделал его в VR, чтобы увидеть, каково это — находиться в этом пространстве. И решил, что на самом деле это довольно удобный формат!



Наверное, продолжу развивать эту VR-сцену в виде мини-игры RTS. Мне есть чему поучиться как в Unreal, так и в VR, и наличие собственного проекта всегда помогает! Quest 2 — одна из самых продвинутых VR гарнитур, доступных на сегодняшний день. Несмотря на то, что это быстро изменится, базовые навыки создания VR сцены будут полезны в течение довольно долгого времени. Выберите проект и начинайте!


До прочтения этой статьи рекомендую прочитать первую часть.

План на сегодня

Сегодня мы создадим простеньких противников, который будут ходить туда-сюда. Научимся наносить им урон.

Создаем противника

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

Жмем ПКМ по блупринту нашего персонажа и выбираем вот этот вариант.


После этого нужно дать блупринту название. Я назвал его BP_HabrTPSBot.

Теперь нам необходимо создать так называемый AIController. В Unreal Engine есть 2 типа контроллеров. PlayerController и AIController. В дальнейшем их стоит воспринимать, как мозги, которые могут вселяться в разные тела (персонажей и Pawn объекты). PlayerController работает именно, как мозг игрока. А вот AIController - это мозг нашего противника, который будет говорить телу (персонажу), когда и что он должен делать. А сам персонаж будет определять, как он будет это делать.

Жмем ПКМ по пустому месту. И нажимаем BlueprintClass.


В списке ищем AIController и нажимаем Select.


Я дам ему название BP_HabrTPSBot_AI.

После этого нам необходимо открыть блупринт персонажа. И открыть вкладку Class Defaults.


В панели Details ищем переменную AIControllerClass. Устанавливаем туда наш новый контроллер, который мы создали в предыдущем пункте.


После этого просто DragNDrop перносим персонаж нашего бота в мир.


Учим бот ходить по случайным точкам

Для этого заходим в AIController. Заходим в EventGraph.


Нам нужен именно BeginPlay. Напомню, это ивент, который вызывается в тот момент, когда игра стартует (или когда персонаж появляется в мире).

Кликаем ПКМ и ищем вот такую ноду.


В качестве того, кого мы будем отправлять на точку мы выберем Pawn (персонажа), которым управляет AIController. Мы можем его легко получить вот такой нодой.


Далее нам необходимо указать куда мы двигаемся.

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


Открываем менюшку PlaceActors и ищем там NavMeshBoundsVolume. Перетаскиваем его на нашу карту. Теперь если мы нажмем латинскую кнопку P на клавиатуре, то мы увидим нам NavMesh.


Нам необходимо заскейлить NavMesh на размеры всей карты, чтобы персонаж понимал как ходить по всей карте, а не только по ее маленькому кусочку. Для этого просто меняем масштаб, как мы это уже умеем делать. По итогу мы должны увидеть нечто вот такое.


Чтобы отключить NavMesh - необходимо еще раз нажать на кнопку P на клавиатуре.

Возвращаемся к блупринту AIController. С помощью вот такой ноды найдем рандомную точку определенном радиусе от персонажа.


Остается всего-ничего. Зациклить хождение по точкам, а также добавить логику задержки на этих точках. Для этого на OnSuccess вешаем Delay (ноду, которая ждем определенное количество времени, а после этого продолжает вызовы всего, что на нее подвязано).


После чего нам необходимо прокинуть исполнение с ноды Delay но входного исполнительного пина ноды AIMoveTo. Также это необходимо сделать с пином OnFail, чтобы в случае ошибки бот нашел новую точку и начал движение к ней. В блупринтах нельзя втыкать выходящие пины с ноды в входящий пин этой же ноды, поэтому я воспользуюсь небольшой хитростью и сделаю это через еще одну ноду Sequence (она последовательно выполняет команды, которые на нее подвязаны, поэтому она не принесет никах дополнительных вызовов).


Теперь просто необходимо подключить это к ивенту BeginPlay и оно заработает.

Наносим урон

В UnrealEngine уже есть встроенная система урона, поэтому все будет достаточно просто.

Заходим внутрь нашего игрового персонажа и там, где мы делали LineTraceByChannel находим OutHit пин. Нажимаем по нему ПКМ и нажимаем SplitStructPin. Результат должен получиться следующим.


Далее необходимо найти ноду ApplyDamage и в качестве Actor, которому мы наносим Damage указать того Actor, в которого мы попали. В поле BaseDamage вписываем количество урона, которое мы хотим нанести.


Также нам необходимо включить канал Visibility у капсулы персонажа, по которой мы будем попадать. Для этого выделаем капсулу и в Details ставим следующие настройки.


Теперь нужно создать жизни. Для этого кликаем + в разделе Variables.



Новую переменную называем Health и делаем ее типа Float. Компилируем Blueprint и выставляем значение по умолчанию 100.0


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

Для этого наводим на раздел Functions. Появляется выпадашка Override и там выбираем AnyDamage.


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

Если сделать DragNDrop переменной на EventGraph, то нам предложат 2 типа действий с переменной. Прочитать значение (get) и записать значение (set).


Нам нужно будет использовать оба. Делаем вычитание следующим образом.


Однако эта реализация не идеальна, потому что наше здоровье может уйти в отрицательное значение. Чтобы это предотвратить, добавим следующую конструкцию.


Таким образом значение Health никогда не будет уходить в отрицательные значения.

Далее нам необходимо добавить проверку на смерть персонажа. Делаем это при помощи следующей конструкции, используя ноду Branch (аналог IF в блупринтах).


В случае смерти мы будем просто уничтожать Actor.

Проверка функционала

Что дальше

Мы сделали самую базовую реализацию урона. Ее можно совершенствовать еще много как. Добавлять отображения попаданий, добавлять различные модификаторы урона. Более подробно мы рассматриваем это на курсе Технический Game Designer Unreal Engine, на котором я преподаю в Otus.

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