Приветствую, друзья, с Вами Будуев Антон. В данной статье мы разберем, как в Unreal Engine (UE4, UE5) динамически породить («заспавнить») Актор в игровом мире с помощью Blueprint-функции Spawn Actor from Class.
Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.
Spawn Actor from Class в Unreal Engine

Функция Spawn Actor from Class в Unreal Engine (UE5, UE4) или Spawn Actor NONE — это функция, которая динамически создает (порождает, «спавнит») новый экземпляр Актора указанного Blueprint-класса и добавляет его на игровой уровень во время действия игры. При этом позволяя указать местоположение, поворот и масштаб нового объекта Актора при его создании.
Spawn Actor from Class используется для динамического наполнения уровня, например, для добавления новых объектов в игровой мир (предметов, декораций), для создания врагов во время игры, снарядов, выпущенных игроком, и так далее.
Параметры:
- Class (Actor) — класс Актора, объект которого необходимо создать динамически в мире во время действия игры.
- Spawn Transform (transform) — трансформация Актора. Определяет положение, поворот и масштаб создаваемого объекта в мировом пространстве. Параметр может быть разделён (Split Struct Pin) на 3 отдельных значения:
— Spawn Transform Location (положение);
— Spawn Transform Rotation (поворот);
— Spawn Transform Scale (масштаб). - Collision Handling Override (enum) — определяет, как обрабатывать коллизию (столкновение) при спавне. Возможны следующие варианты выбора:
— Always Spawn, Ignore Collisions (всегда создавать Актор, даже если он сталкивается с другими объектами);
— Try To Adjust Location, But Always Spawn (пытаться переместить Актор на новое ближайшее местоположение, чтобы избежать столкновений, но создавать его в любом случае);
— Try To Adjust Location, Don’t Spawn If Still Colliding (пытаться переместить Актор на новое ближайшее местоположение, чтобы избежать столкновений, но не создавать его, если перемещение невозможно);
— Do Not Spawn (не создавать Актор, если он сталкивается с другими объектами). - Transform Scale Method (enum) — метод определения масштаба. Возможны следующие варианты выбора:
— Override Root Component Scale (игнорировать масштаб корневого компонента создаваемого Актора, перезаписав его новым значением масштаба из параметра Spawn Transform Scale);
— Multiply Scale With Root Component Scale (перемножить значение масштаба из параметра Spawn Transform Scale на масштаб корневого компонента создаваемого Актора); - Owner (Actor) — определяет Актор, который будет владельцем создаваемого Актора. Необязательный параметр.
- Instigator (Pawn) — определяет Pawn, который вызвал спавн. Используется для определения того, кто вызвал текущее событие, например, для определения того, кто заспавнил снаряд.
- Return Value (Actor) — возвращаемый параметр. Возвращает ссылку на создаваемый объект Актора.
Практический урок в Unreal Engine. Динамическое порождение снарядов функцией Spawn Actor from Class
Для текущей практики мы воспользуемся полностью готовым блюпринт-кодом из стандартного шаблона игры от первого лица движка Unreal Engine (UE5). При этом разобрав весь код относительно функции Spawn Actor from Class.
В данном примере персонаж имеет возможность подобрать оружие BP_Pickup_Rifle, после чего выпускать из него желтые снаряды BP_FirstPersonProjectile, которые как раз-таки и порождаются в игровом мире рассматриваемой функцией.

Оружие прикрепляется к персонажу динамически в качестве дополнительного пользовательского компонента BP_Weapon_Component. Именно в этом компоненте разработчиками описана вся логика оружия, в том числе и динамическое создание снарядов BP_FirstPersonProjectile.
Итак, в шаблоне проекта игры от первого лица откроем Blueprint компонента оружия BP_Weapon_Component по следующему пути: /All/Game/FirstPerson/Blueprints. В Event Graph которого мы найдём обработку двух событий:
- Event Begin Play — по которому, в момент начала работы данного компонента, компонент оружия с помощью функции Attach Component to Component прикрепляется к Skeletal Mesh персонажа и для Player Controller назначается соответствующая Input Map для управления игроком этим оружием;
- Enhanced Input Action IA_Shoot — по данному событию (нажатие игроком левой клавиши мыши) производится стрельба из оружия. А именно, спавн в игровом мире снаряда класса BP_FirstPersonProjectile, а также назначение звука и анимации стрельбы.
В рамках текущей статьи для нас представляет интерес разбор логической цепочки события Enhanced Input Action IA_Shoot, где производится динамическое создание Актора снаряда функцией Spawn Actor from Class.
- В данном примере функция Spawn Actor from Class динамически создаёт снаряд по запуску события нажатия кнопки стрельбы Enhanced Input Action IA_Shoot. При этом настройки функции достаточно простые — в качестве класса, на основе которого будет создаваться объект, выбран пользовательский класс снаряда BP_FirstPersonProjectile со стандартными настройками обработки коллизии (Collision Handling Override = Default) и игнорирования масштаба корневого компонента этого снаряда (Transform Scale Method = Override Root Component Scale). Параметры Owner и Instigator вообще пропущены.
- Основная логика здесь описана для расчёта параметра трансформации создаваемого снаряда, то есть его поворота и местоположения во время спавна. Чтобы не загружать функцию Spawn Actor from Class, разделяя параметр трансформации на составляющие, разработчики решили подготовить данную трансформацию (Location и Rotation) нодой Make Transform.
- Rotation (поворот снаряда) рассчитывается из поворота камеры игрока, который в свою очередь возвращает нода Get Camera Rotation.
- Местоположение создаваемого снаряда рассчитывается на основе местоположения сокета Ammo и заданного смещения Projectile Offset. Сокет Ammo уже заранее установлен в Skeletal Mesh самого оружия.

- Функция Get Socket Location возвращает местоположение этого сокета, к которому затем добавляется смещение и направление (вектор вперёд по оси X).
- Данный вектор создаёт функция Rotate Vector, которая разворачивает вектор смещения снаряда Projectile Offset, основываясь на повороте камеры, возвращаемый функцией Get Camera Rotation. Где Projectile Offset — это пользовательская переменная смещения снаряда, созданная разработчиками со значением смещения X = 100, Y = 0, Z = -10.
Таким образом, на основе поворота камеры игрока и заданного смещения от сокета оружия функция Spawn Actor from Class динамически порождает объект снаряда класса BP_FirstPersonProjectile в игровом мире рядом с оружием персонажа и по направлению взгляда игрока при нажатии игроком клавиши стрельбы.
Скриншот
Код на BlueprintUE

Совет. Вскоре выйдет моя бесплатная книга по Blueprints для Unreal Engine в PDF формате. Как она выйдет, рекомендую её скачать, чтобы Вы детально изучили блюпринты Анрил Энджин.