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

Blueprint-функция Deactivate в Unreal Engine — это метод класса Actor Component, отвечающий за отключение (деактивацию) компонента в логике игры. Функция вызывается как из C++, так и из Blueprints, и позволяет останавливать выполнение функциональной логики компонента, если она была активной. В момент деактивации производится отключение тиков и запускается диспетчер событий, уведомляющий подписчиков о деактивации компонента.
Перевод официальной справки: функция Deactivate — деактивирует компонент сцены (Scene Component). Должна быть переопределена в наследуемых нативных классах.
Функция деактивации обратная по действию методу Activate и используется для ручного выключения компонента, поддерживающего активацию/деактивацию, что может быть полезно, например:
- при деактивации триггеров;
- при динамическом включении/отключении функциональности Актора;
- для временной приостановки работы компонента без его уничтожения.
Как Deactivate работает внутри
Рассмотрим, как функция Deactivate работает внутри Unreal Engine.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 void UActorComponent::Deactivate()
{
// Проверяем, можно ли деактивировать компонент.
// Если ShouldActivate() == false — это значит, что компонент уже активен или не может быть активирован.
if (ShouldActivate() == false)
{
// Отключаем тик компонента.
// Это останавливает выполнение TickComponent(), если компонент поддерживает тики (PrimaryComponentTick.bCanEverTick == true).
SetComponentTickEnabled(false);
// Устанавливаем внутренний флаг активности напрямую.
// Не вызывает повторную логику или репликацию по сети.
// Фактически устанавливает: bIsActive = false;
SetActiveFlag(false);
// Генерируем событие "OnComponentDeactivated", доступное как в C++, так и в Blueprints.
// Это позволяет подписаться на момент деактивации компонента и выполнить соответствующие действия.
OnComponentDeactivated.Broadcast(this);
}
// Если условие не выполнено (компонент не был активным), ничего не делаем.
}
Логика работы функции:
- Проверка необходимости деактивации компонента — вызывается виртуальный метод движка ShouldActivate(), проверяющий, можно ли активировать компонент в текущем состоянии. Если ShouldActivate() == False, активация компонента не требуется, так как он активен, а значит мы можем его деактивировать.
* ShouldActivate() — виртуальная функция, которая по умолчанию проверяет, не активен ли уже компонент. Может быть переопределена в дочерних классах для более сложных условий.
- Отключение Tick — производится отключение выполнения функции TickComponent().
- Установка внутреннего флага неактивности — у компонента свойство Is Active устанавливается в значение False.
- Вызов Event Dispatcher — производится запуск диспетчера событий On Component Deactivated. Событие, доступно как в C++, так и в Blueprint. Может использоваться для запуска пользовательской логики после деактивации компонента.
Смежные функции
- Activate — активирует компонент (если он не был активным ранее).
- Set Active — устанавливает новое состояние активности компонента.
- Set Auto Activate — определяет, будет ли компонент автоматически активирован при начале игры.
- Toggle Active — переключает текущее состояние активности компонента
- Is Active — возвращает текущее состояние активности компонента.
Пример использования функции Deactivate
C++
Деактивируем компонент движения персонажа по нажатию на клавишу F клавиатуры.
1
2
3
4
5
6
7 void AMyCharacter::OnFKeyPressed()
{
if (MovementComponent) // Убеждаемся, что компонент существует
{
MovementComponent->Deactivate(); // Деактивируем компонент движения
}
}
Blueprints
- Загрузите шаблон игры Unreal Engine (UE5) от третьего лица. Откройте блюпринт персонажа BP_ThirdPersonCharacter по пути /All/Game/ThirdPerson/Blueprints.
- В Event Graph разместите событие Key F (событие, срабатывающее при нажатии клавиши F на клавиатуре).
- Перетащите на поле Event Graph ссылку на компонент Character Movement и из этой ссылки получите функцию Deactivate.
- Подключите Deactivate к событию Key F.
В результате при запуске игры персонаж сможет двигаться, но при нажатии на клавишу F при помощи функции деактивации компонент Character Movement отключится, и персонаж более не сможет продолжать движение.

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