Как сделать инвентарь в unreal engine 4

Добавил пользователь Валентин П.
Обновлено: 04.10.2024

Я в блендере сделал модель, состоящую из нескольких отдельных частей (шкаф и дверцы). Экспортировал в .fbx
И когда перетаскиваю модель в UE, то появляется окно импорта, после чего оно мне добавляет не один объект, как в юнити, а отдельный объект для шкафа и для каждой дверцы
Как импортировать один цельный объект?

Изображение

Нашел способ перенести на сцену все как один объект - нужно в UE выделить импортированный шкаф и дверцы, и перенести на сцену, тогда все перенесется как один объект. Но есть две проблемы
1. Слетает pivot point. Я его на дверцах в блендере так выставил, чтоб при вращении они открывались, как в шкафу дверцы открываются
2. В content browser и World Outliner появится слишком много объектов. Это мне нужно вучную под каждую такую модель создавать папку и туда все кидать, чтобы не захламлять?

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

Это так в смысле? Все-равно куча отдельных объектов

Изображение

dmitrykozyr
> куча отдельных объектов
импорт скелетки
дверцы же должны вращаться на петлях и т.п.

Sh.Tac.
> импорт скелетки
Так? Тогда объектов еще больше

2 | Импорт модели из blender в UE4

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

dmitrykozyr
> Как импортировать один цельный объект?
В меню импорта статик-меша есть галочка combine mesh.

lorik
> иерархию надо делать перетаскиванием прямо в blender outliner
Если перетаскивать\не перетаскивать, то в обоих случаях импортируется как один объект, если при импорте поставить галочку напротив Skeletal Mesh, дверцы уже открывать нельзя.
А если Skeletal Mesh убрать, то даже если в блендере иерархию сделал, в UE она не сохраняется, все импортируется как отдельные объекты

lorik
> В меню импорта статик-меша есть галочка combine mesh.
Тогда импортируется как один объект и дверцы уже нельзя открывать.
А мне нужно импортировать так, чтобы была иерархия, как в юнити.

2 | Импорт модели из blender в UE4

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

> дверцы уже открывать нельзя.
анимацию настрой

dmitrykozyr
Напрямую сделать как в Юнити не получится.
Надо или экспортить отдельно и собирать потом в блюпринте, или делать скинед-меш и логикой в блюпринте открывать двери.

Когда сидел на Анриле, то у них на форуме читал про плагин, который импортит fbx с сохранением пивотов

Запустить видео по клику - Как делать игры

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

П.С. Если тебе надо просто разнообразие шкафчиков без всякого интерактива, то проще сделать несколько вариантов с по-разномому открытыми дверками.

Sh.Tac.
> а выше что такое тогда?
Если не перетаскивать в блендере все объекты внутрь одного объекта, то при импорте с опцией Skeletal Mesh создается много объектов - еще больше чем без Skeletal Mesh, то есть смысл теряется.
А если не перетаскивать объекты в блендере внутрь одного объекта, то при импорте с опцией Skeletal Mesh создается три объекта: Mesh, Physics Asset и Skeleton.
То есть в первом случае получаем еще больше объектов, а во втором один цельный меш и с дверцами отдельно нельзя работать

Sh.Tac.
> > дверцы уже открывать нельзя.
> анимацию настрой
Так как, если шкаф и дверцы - это один цельный объект)

lorik
> Если тебе надо просто разнообразие шкафчиков без всякого интерактива
Нужно с интерактивом


Современные игры становятся все реалистичнее, и один из способов этого добиться — создать разрушаемое окружение. К тому же, крушить мебель, растения, стены, здания и целые города просто весело.

Наиболее яркими примерами игр с хорошей разрушаемостью можно назвать Red Fraction: Guerrilla с ее возможностью пробивать тоннель сквозь Марс, Battlefield: Bad Company 2, где при желании можно превратить весь сервер в пепелище, и Control с его процедурным разрушением всего, что попадается на глаза.

В 2019 году Epic Games представила демо новой высокопроизводительной системы физики и разрушений

Требования

Начнем с перечисления того, чего мы хотели бы достичь:

  • Художественный контроль. Мы хотим, чтобы наши художники могли создавать разрушаемые объекты, как им угодно.
  • Разрушения, не влияющие на геймплей. Они должны быть чисто визуальными, не нарушать ничего, что связано с игровым процессом.
  • Оптимизация. Мы хотим иметь полный контроль над производительностью и не допустить снижения производительности ЦП.
  • Простота установки. Настройка конфигурации таких объектов должна быть понятна художникам, поэтому необходимо, чтобы она включала только необходимый минимум шагов.

За референс в этой статье было взято разрушаемое окружение из Dark Souls 3 и Bloodborne.

image

Основная идея

На самом деле, идея проста:

  • Создаем видимую базовую сетку;
  • Добавляем скрытые части сетки;
  • При разрушении: скрываем базовую сетку -> показываем ее части -> запускаем физику.

image

image

Подготовка ассетов

Для подготовки объектов будем использовать Blender. Для создания сетки, по которой они будут разрушаться, используем аддон Blender под названием Cell Fracture.

Включение аддона

Сначала нам понадобится включить аддон, поскольку по умолчанию он выключен.

image


Включение аддона Cell Fracture

Поиск аддона (F3)

Затем включаем аддон на выбранной сетке.

image

Настройки конфигурации

image

Запуск аддона

Посмотрите видео, сверьтесь с настройками оттуда. Убедитесь, что вы правильно настроили свои материалы.

Выбор материала для разворачивания разрезанных частей

Затем создадим UV-карту для этих частей.

image

image

Добавляем разделение границ (Edge Split)

Edge Split исправит затенение.

image

Модификаторы ссылок

Их использование позволит применить Edge Split ко всем выбранным частям.

image

Завершение

Вот как это выглядит в Blender. По сути, нам не нужно моделировать все части по отдельности.

image

Реализация

Базовый класс

Наш разрушаемый объект — это Актер, у которого есть несколько компонентов:

  • Корневая сцена;
  • Static Mesh — базовая сетка;
  • Бокс для столкновений;
  • Бокс для перекрытий;
  • Радиальная сила.

image

Изменим кое-какие настройки в конструкторе:

  • Отключим функцию таймера Tick (вообще никогда не забывайте отключать ее для актеров, которым она не нужна);
  • Устанавливаем статичную мобильность для всех компонентов;
  • Отключаем влияние на навигацию;
  • Настраиваем профили столкновений.

В Begin Play мы собираем некоторые данные и настраиваем их:

Триггеры разрушения

Существует три способа спровоцировать разрушение.

Разрушение происходит в том случае, когда кто-то бросает или каким-либо другим образом использует предмет, активирующий процесс, — например, катящийся мяч.

image

OnTakeDamage

Разрушаемый объект получает урон.

image

OnOverlapWithNearDestroyable

В этом случае один разрушаемый объект накладывается на другой. В нашем случае для простоты они оба ломаются.

image

Флоу разрушения объекта

image


Диаграмма разрушения объекта

Что делать с функцией сна

Когда срабатывает функция Sleep, мы отключаем физику/столкновения и устанавливаем статичную мобильность. Благодаря этому производительность увеличится.

Каждый примитивный компонент с физикой может перейти в режим сна. Привязываемся к этой функции при разрушении.

Эта функция может быть присуща любому примитиву. Мы привязываемся к ней для завершения действия над объектом.

Иногда физический объект не переходит в режим сна и продолжает обновляться, даже если вы не видите при этом никакого движения. Если он продолжает моделировать физику, мы заставляем все его части перейти в режим сна спустя 15 секунд.

Что делать с разрушением

Нам необходимо проверить, можно ли разрушить актера (например, если игрок далеко). Если нет, проведем проверку повторно спустя некоторое время.

Вызов узла OnHit для частей объекта

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

End Play и очистка

В нашу игру можно играть в редакторе по умолчанию и некоторых пользовательских редакторах. Вот почему нам нужно очистить в EndPlay все, что можно.

Конфигурация в Blueprints

image

Графическим художникам не нужно ничего делать в движке.

Наш базовый класс Blueprint выполняет только аудиовизуальные вещи из событий, которые мы предоставили на C ++.

BeginPlay — загружает необходимые ассеты. По сути, в нашем случае каждый ассет представляет собой указатель на программный объект, и необходимо использовать их даже при создании прототипов. Жестко запрограммированные референсы ассетов увеличат время загрузки редактора/игры и использование памяти.

image

On Break Event — отвечает на эффекты и звуки появления. Здесь вы можете найти некоторые параметры Niagara, которые будут описаны позже.

image

On Part Hit Event — вызывает эффекты и звуки ударов.

image

Утилита для быстрого добавления столкновений

image

Можно использовать

image

Эффекты частиц в Niagara

Далее описывается создание простого эффекта в

image

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

Эрозия, цвет и альфа берутся из Niagara.

image


Канал текстуры R

image


Канал текстуры G

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

Параметры системы Niagara

Мы используем две системы Niagara: одну для эффекта разрыва (она использует базовую сетку для порождения частиц), а другую — при столкновении деталей (без статичного расположения сетки).

image


Пользователь может указать цвет и количество спаунов и выбрать статичную сетку, которая будет использоваться для выбора расположения спауна частиц

Niagara Spawn Burst

image


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

Niagara Particle Spawn

image

  • Отбираем статичную сетку из разрушаемых объектов;
  • Устанавливаем случайные время жизни (Lifetime), массу и размер;
  • Выбираем цвет из пользовательских (он задается разрушаемым актером);
  • Создаем частицы в вершинах сетки,
  • Добавляем случайную скорость и скорость вращения.

Использование статичной сетки

Чтобы иметь возможность использовать статичную сетку в Niagara, на вашей сетке должен быть установлен флажок AllowCPU.

image

СОВЕТ: В текущей (4.24) версии движка, если вы повторно импортируете свою сетку, это значение будет сброшено на значение по умолчанию. А в доставочной сборке, если вы попытаетесь запустить такую систему Niagara с сеткой, у которой не включен доступ к ЦП, произойдет сбой.

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

Он используется в Blueprints до Niagara.

image

Можно создать виджет редактора для поиска разрушаемых объектов и установить их переменную Base Mesh AllowCPUAccess.

Приведем код на Python, который ищет все разрушаемые объекты и устанавливает доступ ЦП к базовой сетке.

Вы можете запустить его напрямую с помощью команды py или создать кнопку для запуска кода в

image

Обновление частиц Niagara

image

image

При обновлении мы проделываем следующие вещи:

  • Масштабируем Alpha Over Life,
  • Добавляем curl noise,
  • Изменяем скорость вращения в соответствии с выражением: (Particles.RotRate * (0.8 – Particles.NormalizedAge);
  • Масштабируем параметр частиц Size Over Life,
  • Обновляем параметр размытия материала,
  • Добавляем вектор шума.

Отчего такой довольно олд-скульный подход?

Конечно, можно использовать текущую систему разрушений из UE4, но так можно эффективнее контролировать производительность и визуальные эффекты. На вопрос, нужна ли для ваших нужд столь большая система, как встроенная по умолчанию, вы должны найти ответ сами. Потому что часто ее использование бывает необоснованным.

Что же касается Chaos, подождем, когда он будет готов к полноценному релизу, и тогда посмотрим на его возможности.

Как создать новый проект и в нем новый уровень я уже описывал в статье Создание первого проекта итак при создании новой карты выберем тип ее blank т.е. она будет изначально пустой далее мы самостоятельно разместим на карте объекты карты так и освещение.

Далее в контент браузере находим стандартные элементы StarterContent/Architecture они нам понадеяться для создания поверхности по которой дальше будет перемещаться наш персонаж. Далее выберем элемент Floor_400x400 и перетащим его на сцену. По сути это пол и стены нашей будущей сцены.


Следующим шагом скопируем выбранный элемент 6 раз для этого можно либо воспользоваться контекстным меню либо сочетанием клавиш CTRL+W в нашем обозревателе объектов сцены будут отображены все 6 объектов но так как они будут располагаться в одинаковых координатах и иметь одинаковый размер мы их не увидим в окне редактора.


Чтобы настроить каждый элемент мы поочередно выделяем их в списке объектов и меняем значения в параметре transform для каждого из них.








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

Далее для удобства переведем окно в режим отображения сетки для этого выберем следующий пункт в меню настройки вида.


Таким образом система будет отображать не замкнутые полигоны а сетки наших объектов сцены с которые будет удобнее выделять и настраивать


Следующим шагов в обозревателе ресурсов выберем стену из которой будем создавать наши стены для дома. И мышкой перетащим их в окно редактора на сцену.


Выделим данную стену в обозревателе объектов сцены и скопируем данный элемент 11 раз нажав сочетание клавиш CTRL+W либо используя контекстное меню.


Далее по аналогии с полом и потолком выделим каждую стену и поочередно изменим их параметры позиции на необходимые.












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


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

Итак добавляем балки перекрытий для нашего дома. В Обозревателе ресурсов выберем объект с названием Pillar_50x500 он похож на колонну из которой будут строиться наши перекрытия.


Далее в обозревателе объектов сцены выделим нашу колонну и сочетанием клавиш CTRL+W скопируем их в количестве 5 штук.


Далее будем позиционировать каждую колонну в нужное место сцены. Выделим поочередно каждую и изменив параметры позиции в свойствах объектов.








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


Для отображения стены с дверным проемом Wall_Door_400x400 и добавим его на сцену перетащив из обозревателя ресурсов.



В итоге у нас получится небольшая комната без освещения и внешнего мира. Далее приступим к созданию освещения.

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

Использование Кустомизедувс

Если необходимо предоставить UV мозаику на своем материале, используйте Кустомизедувс, а не изменяйте UV узла текстуры напрямую. Кустомизедувс позволяют управлять UVs в шейдерах вершин, а не в шейдере пикселей.

Параметры материала в нереальном режиме

Сведения о материалах см. в документации по нереальному подсистеме и рекомендуемым примерам на снимках экрана ниже.

 Рекомендуемые параметры материалов в нереальных

рекомендуемых настройках материалов

 Нерекомендуемые параметры материалов в нереальной

нерекомендуемой настройке материалов

Изменение режима смешения

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

Изменение режима смешения

Обновление освещения для мобильных устройств

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

Параметры мобильного материала в нереальном режиме

Настройка перемотки заливки вперед

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

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

Настройка материала полупрозрачность

Указывает, что на полупрозрачные материалы не должны влиять раскрытия или ДОФ. Так как оба этих эффекта в MR редки, этот параметр должен быть включен по умолчанию.

Отдельный параметр полупрозрачность в нереальном режиме для мобильных устройств

Необязательные параметры

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

Необязательные параметры материалов в нереальном режиме

Рекомендации

Следующие параметры не являются "параметрами", так как они являются рекомендациями, относящимися к материалам.

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

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

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

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

Создание экземпляров материалов в нереальном режиме

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

Создание динамических параметров экземпляра материала в нереальном режиме

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

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