Сравнение объектов GameObject с объектами UObject и акторами
В Unity объекты GameObject представляют собой программируемые внутриигровые объекты. GameObject сам по себе не выполняет никаких функций; он выступает в качестве контейнера для компонентов, таких как источники освещения и сетки, обеспечивающих определённый функционал. К каждому GameObject прикреплён компонент преобразования, представляющий его местоположение и ориентацию в мире.
В Unreal Engine (UE) объекты UObject представляют собой программируемые объекты в игровом мире. Класс UObject представляет собой общий базовый класс для большинства классов в UE. Такой подход поддерживает систему отражений Unreal Engine, которая обеспечивает автоматический сбор мусора и другие преимущества.
Актор, подкласс UObject, очень похож на GameObject в Unity. Акторы поддерживают систему компонентов и преобразования (USceneComponent) UE, чтобы их можно было размещать их в мире. Однако ключевым отличием от Unity является возможность расширения функционала актора напрямую, а не только через компоненты.
Если реализация объекта не требует дополнительного функционала одного из подклассов UObject, вы можете напрямую расширить UObject, чтобы реализация была менее затратной в плане ресурсов. Более подробную информацию об объектах UObject см. в разделе Объекты.
Сравнение систем компонентов
Как и в Unity, в UE есть система компонентов, с помощью которой можно добавлять повторно используемые функции к игровым объектам. Вы можете создавать собственные компоненты с нуля или расширять один из множества компонентов, предоставляемых UE. Но прежде стоит разобраться в следующих основных типах компонентов:
Компонент актора — базовый тип компонента, который присоединяется к актору. Компоненты акторов не имеют преобразований, то есть у них нет физического местоположения в мире. Они полезны для реализации абстрактного поведения, такого как управление инвентарём или атрибутами.
Компонент сцены — тип компонента актора, который добавляет преобразование для позиционирования в мире. Компоненты сцены не имеют визуального представления, поэтому они подходят для реализации невизуальных поведений, основанных на местоположении, таких как физические силы, камеры или звуки.
Компонент примитива — тип компонента сцены, в котором реализовано визуальное и физическое представление. Такие компоненты подходят для отрисовки визуальных элементов и областей коллизий.
В Unity можно создавать сложные объекты GameObject с родительско-дочерними отношениями. Например, родительский объект может иметь несколько дочерних объектов с собственными сетками, объектами коллизий или поведениями.
В UE можно создавать акторы с похожей иерархией, используя компоненты вместо дочерних акторов, чтобы снизить расходуемые вычислительные ресурсы и память.
Более подробную информацию о системе компонентов UE см. в разделе Components (Компоненты).
Сравнение методов Update() и Tick()
В Unity обновление компонентов реализовано в основном через методы Update() и FixedUpdate() в MonoBehaviour.
В UE акторы используют метод Tick() (по умолчанию включён), а компоненты опционально используют метод TickComponent() (по умолчанию отключён).
По умолчанию такт выполняется один раз в каждом кадре. Вы можете задать другой интервал тактирования, назначив группу тактирования, такую как TG_DuringPhysics. Вы также можете задать зависимость тактирования, чтобы задержать выполнение тактов до тех пор, пока не будет выполнена другая заданная функция тактирования.
Более подробную информацию см. в следующих разделах:
Фреймворк геймплея
Фреймворк игрового процесса Unreal Engine — это набор классов, включающий акторы и компоненты, который представляет собой модульную основу для создания игрового процесса.
Если сравнить реализацию игрового процесса в Unity с использованием фреймворка игрового процесса UE, то различий будет больше, чем сходств. В связи с этим рекомендуем ознакомиться с разделом Gameplay Framework (Инфраструктура игрового процесса), чтобы узнать больше о том, как концепции, изложенные в настоящем документе, вписываются в эту инфраструктуру. Кроме того, в разделах ниже рассматриваются некоторые важные классы фреймворка на высоком уровне.
Важные подклассы UObject
Уровень — содержит множество игровых объектов, составляющих уровень в вашей игре. Уровни аналогичны сценам в Unity.
Ресурс данных — используется для определения ресурсов, в которых хранятся данные вашей игры. Ресурсы данных аналогичны объектам ScriptableObject в Unity.
Важные подклассы акторов
Пешка является действующим лицом («агентом») в мире. Контроллер может «получить во владение» пешку, чтобы управлять ею.
Персонаж — это тип пешки, представляющий собой гуманоидного персонажа и поддерживающий базовые функции передвижения и коллизий.
Контроллер — отвечает за управление пешками после получения их во владение.
PlayerController — используется для предоставления локального управления пешкой игроку.
AIController — используется для управления пешкой с помощью искусственного интеллекта.
Игровой режим — актор-диспетчер, который определяет вашу игру и задаёт её настройки.
Состояние игры — содержит информацию о состоянии игры.
Состояние игрока — содержит информацию о состоянии игрока. Состояние игры отслеживает состояние всех игроков в массиве.