Blueprint-функция Spawn Actor from Class в Unreal Engine

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

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

Spawn Actor from Class в Unreal Engine

Blueprint-функция Spawn Actor from Class в Unreal Engine (UE5, UE4)
Blueprint-функция Spawn Actor from Class в Unreal Engine (UE5, UE4)

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

Spawn (спавн) снаряда BP_FirstPersonProjectile
Spawn (спавн) снаряда 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.

  1. В данном примере функция Spawn Actor from Class динамически создаёт снаряд по запуску события нажатия кнопки стрельбы Enhanced Input Action IA_Shoot. При этом настройки функции достаточно простые — в качестве класса, на основе которого будет создаваться объект, выбран пользовательский класс снаряда BP_FirstPersonProjectile со стандартными настройками обработки коллизии (Collision Handling Override = Default) и игнорирования масштаба корневого компонента этого снаряда (Transform Scale Method = Override Root Component Scale). Параметры Owner и Instigator вообще пропущены.
  2. Основная логика здесь описана для расчёта параметра трансформации создаваемого снаряда, то есть его поворота и местоположения во время спавна. Чтобы не загружать функцию Spawn Actor from Class, разделяя параметр трансформации на составляющие, разработчики решили подготовить данную трансформацию (Location и Rotation) нодой Make Transform.
  3. Rotation (поворот снаряда) рассчитывается из поворота камеры игрока, который в свою очередь возвращает нода Get Camera Rotation.
  4. Местоположение создаваемого снаряда рассчитывается на основе местоположения сокета Ammo и заданного смещения Projectile Offset. Сокет Ammo уже заранее установлен в Skeletal Mesh самого оружия.
Сокет Ammo, размещённый в Skeletal Mesh оружия
Сокет Ammo, размещённый в Skeletal Mesh оружия
  1. Функция Get Socket Location возвращает местоположение этого сокета, к которому затем добавляется смещение и направление (вектор вперёд по оси X).
  2. Данный вектор создаёт функция Rotate Vector, которая разворачивает вектор смещения снаряда Projectile Offset, основываясь на повороте камеры, возвращаемый функцией Get Camera Rotation. Где Projectile Offset — это пользовательская переменная смещения снаряда, созданная разработчиками со значением смещения X = 100, Y = 0, Z = -10.

Таким образом, на основе поворота камеры игрока и заданного смещения от сокета оружия функция Spawn Actor from Class динамически порождает объект снаряда класса BP_FirstPersonProjectile в игровом мире рядом с оружием персонажа и по направлению взгляда игрока при нажатии игроком клавиши стрельбы.

Скриншот

Практический урок в Unreal Engine. Динамическое порождение снарядов функцией Spawn Actor from Class
Практический урок в Unreal Engine. Динамическое порождение снарядов функцией Spawn Actor from Class

Код на BlueprintUE

Если код отображается без связей, нажмите сверху кода на кнопку «Graph» Если код отображается без связей, нажмите сверху кода на кнопку "Graph"


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


наш Телеграм канал

Оцените статью
( 1 оценка, среднее 5 из 5 )
Поделитесь этой статьей со своими знакомыми в социальных сетях, возможно, эта статья кому-то будет полезна
Unreal Engine - это просто
Добавить комментарий

Нажимая на кнопку "Отправить комментарий", я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.