Дмитрий Назаров

Дмитрий Назаров 

GameDev

18subscribers

162posts

goals2
1 of 100 paid subscribers
Так я смогу понять, что канал кому-то интересен и у меня будет мотивация делаться контентом!
$0 of $6 687 raised
Смогу ГОД разрабатывать игру фултайм, стримить, записывать ролики без отвлечения на наемную работу.

Доработал систему Packed Level Actors в игре

Года так два назад... я выложил на Youtube канале видео о реализации системы подгрузки уровня. Нудное, медленное, но зато доходчивое и понятное.
Я создал свой Левел Стриминг на замену стандартному World Partition.
Почему и зачем? Затем что World Partition выгружает ВСЕ объекты с уровня согласно условиям дистанцирования от них.

А мне нужно было оставлять в памяти и на уровне персонажей, но с их интеллектом, объекты с коллизией, но без сеток.
Music: Clair Obscur: Expedition 33 OST - Goblu / Lorien Testard, Alice Duport-Percier
В последствии, освоив азы асинхронных загрузок я улучшил данный самописный стриминг и на данный момент он вполне хорошо работает:
При приближении персонажа необходимые объекты, персонажи и прочие элементы сцены загружаются, при отдалении - выгружаются.
Но давеча я данный стриминг доработал.
Об этом в данной статье.
--- --- --- --- ---
КАК РАБОТАЕТ СТРИМИНГ ?

Начнем с того что на сцене у меня три типа actor - каждый для своей цели:
1) Base Inventory Item - actor любых предметов для инвентаря: от зелий, травы и золота до оружия, снаряжения и бытовых предметов.
2) BP Mesh - actor для построек, сооружений, предметов окружения (мебели и т.п.).
После последнего обновления данный тип actor не имеет статических или скелетных сеток - он просто "лежит" на уровне, выполняет логику и запускает события.
3) Packed Level Actor - инстанцированный actor состоящий из различных Instanced Static Mesh Component для размещения на уровне (альтернатива Level Instance).
После последнего обновления данный тип actor несет в себе функционал BP Mesh и полностью подготовлен, как для блюпринт логики, так и для инстанцированных сеток. Подробности ниже.
Все эти типы экторов я настроил для выгрузки и загрузки.
У персонажа игрока имеется несколько типов коллизий с индивидуальными каналами коллизии и типами коллизии.
Первая - выгружает/загружает предметы инвентаря.
Вторая - управляет выгрузкой/загрузкой AI персонажей.
Третья - выгружает/загружает Packed Level Actors исходя из настроек в них (подробнее ниже).
Вот пример настройки компонента коллизии для загрузки/выгрузки Base Inventory Item через событие Overlap:
А вот настройки в самом экторе:
В результате одна коллизия пересекает другую коллизию, возникает событие пересечения (Overlap) и запускается нужная логика.
А вот и сама логика из двух событий Отображения и Сокрытия actor-а:
Сетки скрываются - сетки показываются.
События пересечения (Overlap) вызываются не коллизией сетки предмета, а отдельной коллизией, поэтому сокрытие сеток не ломает логику интеракции с данными предметами для AI. Т.е. даже если персонаж игрока ушел и предметы выгрузили своим статические сетки - персонаж искусственного интеллекта все равно сможет их считать и взять.
ЧТО НУЖНО БЫЛО УЛУЧШИТЬ И ПОЧЕМУ?
На днях я работал с State Tree профессии пастуха. Там, AI персонажу нужно взаимодействовать с сараем где живут овцы...
Ранее этот сарай был обычным Actor-ом BP Mesh.
Но позднее я его заменил на Level Instance который сломал всю логику профессии. Level Instance в отличие от Packed Level Actor может содержать в себе не просто сетки, но и actor с их логикой.
Как бы там ни было AI персонаж не смог считывать actor внутри Level стандартным AI Perception.
Плюсом ко всему прочему старые Packe Level Actors с основной карты по методу 2023 года сломались и часть сеток из них пропала:
КОРОЧЕ, все надо было ремонтировать.
Внедрение Level Instance на замену BP Mesh было обязательным в силу их удобства и положительного влияния на оптимизацию.
Поскольку Level Instance работал, но сломал профессию я решил заменить его на Packed Level Actor.
Что такое Packed Level Actor?
Packed Level Actor - это тип actor содержащий в себе Instanced Static Meshes и положительно влияющий на производительность за счет снижения количества Drow Call. Это улучшенная версия Level Instance, но со своими особенностями.
Подробнее: в презентации Epic Games. Вот отрывок с базовой информацией:
Источник: https://www.youtube.com/watch?v=EEf07ggFWRw&t=1665s.
Packed Level Actor:
- положительно влияет на производительность;
- позволяет писать код внутри блюпринта самого packed level actor.
ЧТО Я СДЕЛАЛ В ПОСЛЕДНЕМ ОБНОВЛЕНИИ?
Я перенес всю логику BP Mesh на Packed Level Actor.
Я создал базовый Packed Level Actor:
В него я поместил все компоненты, переменные и логику с BP Mesh - чтобы AI персонаж мог спокойно его считывать:
Тут две боксовые коллизии - одна для обнаружения персонажей (будь-то игрок или AI), а другая для фиксации той самой коллизией LoadingPackedLevelActors у персонажа игрока (см. скриншоты выше).
Логика подгрузки и выгрузки была изменена
За основу я взял разработку 2023 года из видео на Ютубе которое я выкладывал в этом же году...
Напомню:
Часть статических сеток инстанцированного эктора я добавляю в массив Children Mesh Visible который будет выводить данные сетки в любом случае:
Далее все оставшиеся сетки (в случае с фермой выше - всякие бочки, лестницы, пристройки, двери, пол, подставки и т.п.) помещаются в еще один массив - Children Mesh Loading.
В результате логика на Overlap событиях приобретает следующий вид.
При приближении мы загружаем ВСЕ сетки, а при отдалении - оставляем только те, что обозначены, как основные.
По итогу манипуляций Packed Level Actor теперь улучшен и работает, как обычный actor - со всей логикой, компонентами и проч.
Классический Packed Level Actor создается через ПКМ и выпадающее меню:
В моем же случае - я создаю дочерний Packed Level Actor из основного эктора со всей логикой.
Таким образом мне не приходится по 100 раз копировать функции, переменные и т.п.
Единственное что я делаю - это перезаписываю функцию которая формирует массив Children Mesh Visible из инстанцированных сеток, т.к. по факту каждый Packed Level Actor содержит свой набор Instanced Statiс Meshes.
Это все на сегодня! Надеюсь информация была полезна!
Буду рад комментариям, замечаниям, пожеланиям, любой критике и  поддержке.
Subscription levels2

Геймер

$1.34 per month
Подпишись и получай на 50% больше контента по разработке игры.

Разработчик

$3.4 per month
- Подпишись и получай на 100% больше информации и опыта разработчика.
- Детали из процесса разработки механик и дизайнерских решений.
- Полезные лайфхаки для разработчика
Go up