Хабрахабр

Джентельменский набор программиста UE4, ч. 1

Буквально на днях, в чатике по UE4 я встретил такое: Давно хотелось составить список навыков и инструментов, которыми, по моему мнению, должны входить в «джентельменский набор» любого программиста под Unreal Engine 4.

первое, что пришло в голову > blueprints, animation dev, tech art, ai, multiplayer, editor extensions.

> Что приходит на ум: blueprints, animations, AI, material editor, widgets, slate, editor extensions, ue4 plugins, physics, lighting, rendering, c++
+ Сколько времени работал(а) с движком и страна, всё 🙂

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

Не используйте общих слов

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

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

Основы архитектуры движка

  • Какие отличия между классами UObject и AActor? В чём принципиальное отличие? Можно ли заставить UObject выполнять те же самые функции? Почему AGameState и APlayerState являются экторами? Аналогичный вопрос про AGameMode и AHUD.
  • Чем AGameMode отличается от UGameInstance? Для чего они оба используются? Зачем нужен APlayerController, и почему он является эктором?
  • Для чего используется UPROPERTY? Можно ли заменить его SharedRef'ами? Как решить Circular Dependecy у экторов (родитель имеет указатель на ребёнка, ребёнок — на родителя)? Когда будет удалён UObject? Как защитить сущность от удаления Garbage Collector'ом? Как удалить Actor'а?
  • Что такое CDO? Как можно прервать цепочку Reference'ов классов друг на друга, и зачем?
  • Каков порядок инициализации основных сущностей движка (хотя бы на уровне контроллер/павны/стейты)? Каков порядок спавна AActor'а?
  • Компонент в компоненте — хорошо или плохо?
  • Что такое WorldContext? Можно ли его взять в UObject'е, и если да, то откуда?
  • В чем принципиальное отличие Slate от UMG?

Blueprints

  • Чем отличаются макросы от функций?
  • Использование чего именно приводит к образованию Referenc'ов между классами? Ассетами? Как этого избежать?
  • Что такое нативизация блюпринтов и какая от неё польза? Какие недостатки у включенной нативизации?

Сеть

  • Где хранить геймплейные данные пользователя (например, инвентарь или количество очков) во время игровой сессии? Является ли APlayerController подходящим местом?
  • Как PlayerState'ы реплицируются на клиенты? Каков жизненный цикл PlayerController'а и PlayerState'ов при переподключении игрока?
  • Как разграничить репликацию данных по ролям? Что такое сетевые роли? Кем и по каким правилам они назначаются?
  • На каких классах можно вызывать RPC и почему? Можно ли расширить эту возможность на другой класс/сущность? Какие накладные расходы существуют на вызов RPC?
  • Как реплицируются компоненты эктора? Как понять, что эктор реплицировался «целиком»? Что произойдет, если требуется отреплицировать, допустим, 3 Мб данных в экторе: как будет вести себя этот эктор? игра в целом?
  • Как реплицируются массивы? И как реплицируются вложенные свойства (реплицируемое поле является структурой)?
  • Какие ограничения сети существуют? (Цифры!) Как профилировать нагрузку на сеть? Какие методы оптимизации сети применяются? Для чего нужен ForceNetUpdate?

Физика и базовые алгоритмы

  • Как работает демпфирование? Что такое сабстеппинг? Для чего он используется? Как работает синхронизация физики по сети?
  • Что такое кватернион и какие проблемы решает их применение?
  • Что такое каналы объектов и трассировки? Можно ли настроить различное поведение в рамках одного physics asset? Если нет, то почему, и как это обойти?
  • Насколько дорогой операцией является трассировка? От чего это зависит?

Потоки

  • Какие основные потоки есть в UE4? Какие задачи выполняются параллельно, а какие нет? Как устроены тик-группы?
  • Какие действия можно выполнять в собственных параллельных потоках? (Или какие действия точно нельзя выполнять?) Как синхронизировать результаты с основным тредом?

Кода

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

Хотя бы «средний» программист просто обязан знать ответы (или хотя бы иметь свое собственное аргументированное мнение) на вопросы из блока про архитектуру. Для джуниора нормально не знать многого в движке, но иметь светлую голову и разбираться в паре частностей. Особенно по темам, которые описаны на первой же странице документации по Gameplay Framework.

Пишите 🙂 Я всегда только за активное обсуждение. Если у сообщества будет интерес, подобный вопросник можно составить и по анимации, отладке, шейдерам и материалам, освещению, упаковке проекта, созданию AI, работе с Pawn'ами и другими.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть