Оптимизация проекта на Unreal Engine 5. Итоги моей работы за последние 2 месяца.

Последние два (три) месяца я не только играл в Lost Ark, но и работал над своим проектом в Unreal Engine.

C целью оптимизации кода и для повышения FPS перелопатил кучу информации и пересобрал практически все свои блюпринты.

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

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

Soft и Hard reference перменные, Blueprint Interface, оптимизация SizeMap, обмен данными и т.п.

Надеюсь вам будет полезно!

Чтобы много текста не писать
13
9 комментариев

сколько FPS до и после вышло?

Ответить

До 45, после 73 в среднем

2
Ответить

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

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

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

В случаях когда не мог получить ссылку для передачи интерфейсу, вызывал "GetActorClass". Сейчас проверил (спасибо за информацию про Map size !), оказывается это создаёт хард реф, и не смотря на то что всё идёт через интерфейс, вызванный класс вешается на текущий блюпринт.

Получается, что обманул сам себя).

1
Ответить

Спасибо вам! Очень рад, что информация оказалось полезной!
Цель видео, как раз была в том, чтобы показать возможные проблемы от хард референс переменных, неуместных кастов и бесконечных связей между блюпринтами. Для меня самого вся эта инфа было откровенным потрясением)). Очень хотелось поделиться с людьми!
Чем меньше ошибок будем допускать, тем больше оптимизированных игр будем производить)).
Успехов вам!

1
Ответить

Интерфейсы нужно использовать, когда совершенно разные классы используют одинаковый функционал. Если класс один - можно касты. Это уже потом, когда фича выйдет из стадии прототипа, можно избавиться от каста. Но опять же не всегда нужно убирать касты.
Да указания классов, касты тянут за собой рефы и в size map это видно. Интерфейсы не тянут. Пример: сохраняешь реф не на конкретный класс (BP_MyCharacter), а на базовый класс - Character и дёргается методы интерфейса. Или создал наследника от actor component. Подцепил на него свой интерфейс. Когда нужно найти компонент используешь тег на компоненте и метод get components with tag, далее вызываешь методы интерфейса.

1
Ответить

Оптимизацию кодом не пробовали

Ответить