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

в 12:39, , рубрики: UE4, unreal, Unreal Engine, архитектура, Блог компании Mail.Ru Group, вопросы на собеседовании, основы, разработка игр

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

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

> 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, но предложил вопросы по ключевым темам, которые являются, на мой взгляд, основными при работе с движком.

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

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

Автор: ufna

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js